pl/dotnet 버전 0.99(베타) 발표

게시일2024-04-09by Brick Abode
관련 오픈 소스

pl/dotnet 버전 0.99(베타) 발표

pl/dotnet은 PostgreSQL에 C# 및 F#에 대한 완전한 지원을 추가합니다. 0.99는 공개 베타 릴리스입니다. 우리는 그 놀라움을 세계와 공유하고 싶습니다.

  • 함수, 프로시저, DO, SPI, 트리거, 레코드, SRF, OUT/INOUT, 테이블 함수 등 모든 PL 작업을 지원합니다.
  • 우리는 기본적으로 46개의 표준 사용자 유형 중 40개를 지원하며, 이는 외부 PL 중 가장 많은 것입니다.
  • 완전히 NPGSQL과 호환되며 SPI는 최대 호환성을 위해 NPGSQL API를 통해 노출됩니다.
  • 벤치마크에서 C#과 F#은 PostrgreSQL에서 가장 빠른 절차적 언어입니다.
  • 모든 기능은 1013 단위 테스트를 통해 C# 및 F# 모두에 대해 완전히 테스트되었습니다.
  • PostgreSQL 라이선스에 따른 100% 무료 소프트웨어

이것은 베타 릴리스입니다. 사용을 환영하며 피드백을 환영합니다.

액세스 중:

자세한 내용은 아래를 참조하세요.

사용 예

pl/dotnet은 PostgreSQL에서 C# 및 F#의 모든 기능을 제공합니다. 프로시저, 함수 및 트리거.

함수 생성 또는 교체dynamic_record_generator_srf(lim INT8)  
SETOF 레코드를 반환합니다.  
AS $$  
    upperLimit = lim.HasValue ? 임 : System.Int32.MaxValue;  
    for(long i=0;i<upperLimit;i++) Yield return new object?[]  i, $"Number is i" ;   
$$ 언어 plcsharp;

함수 생성 또는 교체 Dynamic_record_generator_srf_fsharp(lim INT8)  
SETOF 레코드를 반환합니다.  
AS $$  
    let upperLimit = Option.defaultValue (int64 System.Int32.MaxValue) lim  
    seq  for i in 0L .. upperLimit - 1L 수율 [| 상자 나; $"숫자는 i입니다." |]   
$$ 언어 plfsharp;

SQL 기능

우리는 모든 SQL 함수 모드를 지원합니다:

  • 일반적인 절차 및 기능
  • 트리거 함수, 전체 트리거 지원: 트리거 인수, 이전/새 행, 행 재작성(허용되는 경우) 및 모든 표준 트리거 정보
  • C#의 반복자와 F#의 시퀀스에 잘 매핑된 집합 반환 함수
  • 테이블 함수 및 레코드 또는 레코드 집합을 반환하는 함수
  • IN/OUT/INOUT 함수 완전 지원

데이터 유형 지원

우리는 40개의 PostgreSQL 유형을 지원하며 모두 NPGSQL 표준 닷넷 유형에 매핑됩니다. 주목할 만한 유일한 예외는 다중 범위, 열거형 및 구조체 유형입니다. 앞으로 추가할 예정입니다. 모든 데이터 유형은 null을 허용하고 전체 배열을 지원합니다. C# 및 F#에 대해 완전히 단위 테스트되었습니다. ((PostgreSQL의 목록으로 형식화됨) 유형: Dotnet 유형) 기술적인 이유로 테이블 대신.)

  • 비트: 비트어레이
  • 부울: 부울
  • 상자: NpgsqlBox
  • bpchar: 문자열
  • 바이테아: 바이트[]
  • cidr: (IP주소 주소, 내부 넷마스크)
  • 서클: NpgsqlCircle
  • 날짜: 날짜만
  • 날짜 범위: NpgsqlRange<DateOnly
  • 플로트4: 플로트
  • float8: 더블
  • inet: (IP주소 주소, 내부 넷마스크)
  • int2: 짧은
  • int4: INT
  • int4range: NpgsqlRange<Int
  • int8:
  • int8range: NpgsqlRange<긴
  • 간격: NpgsqlInterval
  • json: 문자열
  • 라인: NpgsqlLine
  • lseg: NpgsqlLSeg
  • macaddr8: 물리적 주소
  • macaddr: 물리적 주소
  • : 십진수
  • 경로: NpgsqlPath
  • 포인트: NpgsqlPoint
  • 다각형: NpgsqlPolygon
  • 기록: 객체?[]
  • 텍스트: 문자열
  • 타임스탬프: 날짜/시간
  • 타임스탬프tz: 날짜/시간
  • 시간: 시간만
  • timetz: DateTimeOffset
  • tsrange: NpgsqlRange<DateTime
  • tstzrange: NpgsqlRange<날짜시간
  • uuid: 가이드
  • varbit: 비트어레이
  • varchar: 문자열
  • 무효: 공허
  • xml: 문자열

SPI

저희 SPI는 NPGSQL 클라이언트 라이브러리를 활용하여 기본 닷넷을 제공합니다. 기존 클라이언트 코드와 최대한 호환되는 구현입니다. 우리는 매우 낮은 수준에서 NPGSQL 호출을 가로채서 SPI 호출을 통한 클라이언트 프로토콜 처리; 그렇지 않으면 NPGSQL이 수정되지 않았습니다. 우리는 NPGSQL 테스트 스위트를 저장 프로시저로 가져왔고 사용하고 있습니다. 테스트용이므로 호환성을 매우 잘 이해할 수 있습니다. 수준.

호환성을 개선하고 기능을 추가하기 위한 작업이 남아 있습니다. 계속해서 실패하는 NPGSQL 테스트의 가장 큰 범주는 오류입니다. SPI는 NPGSQL과 다르게 예외를 발생시키기 때문입니다. 이러한 비호환성은 사소하지만 많습니다. 우리는 계속 노력하고 있습니다 개선해 보세요.

현재 테스트된 SPI 작업은 다음과 같습니다.

  • 데이터 조작 언어(DML) 작업
    • 선택
    • 삽입
    • 업데이트
    • 삭제
  • 데이터 정의 언어(DDL) 작업
    • 테이블 생성
    • 테이블 변경
    • 테이블 삭제
    • 잘라내기
    • 색인 생성
    • 드롭 인덱스
    • 뷰 생성
    • 드롭 뷰
    • 함수 생성
    • 함수 호출
    • 드롭 기능
    • 프로시저 생성
    • 호출 절차
    • 삭제 절차
  • 거래 제어
    • 거래 시작
    • 커밋
    • 롤백
  • 지원되는 데이터 유형: 모든 pl/dotnet 유형
    • 기본 유형(범위 포함)
    • 배열 유형
    • 기록

사설 토토 사이트가 가지고 있지 않은 것

다중 범위, 열거형 및 복합/테이블 유형에 대한 지원이 부족합니다. 추가할 예정입니다.

우리의 SPI 구현에는 하위 트랜잭션과 같은 몇 가지 사소한 기능이 부족하며 때로는 NPGSQL과 다른(따라서 약간 호환되지 않는) 방식으로 오류가 발생합니다.

dpkg와 바이너리 출력을 모두 갖춘 사설 토토 사이트 빌드 시스템은 기능적이지만 원하는 만큼 깔끔하지는 않습니다.

우리는 이러한 문제를 해결하기 위한 코드 제출을 환영하며 시간이 지나면서 모든 문제를 개선할 수 있기를 바랍니다.

얻을 수 있는 곳

저희 운영 체제 지원:

  • 우리는 Linux를 완벽하게 지원하며 Debian 및 Ubuntu에 dpkg를 제공합니다. (자세한 내용은 당사에서 확인하세요.)설치 페이지)
  • 사설 토토 사이트는 OSX(arm 및 x86)에서 시스템을 구축하고 테스트했지만 아직 패키지하지 않았습니다.
  • 우리는 곧 Windows 지원을 기대합니다. 도움을 주고 싶으시면 저희에게 연락주세요.

연락하기

커뮤니티의 의견을 환영합니다. 저희에게 연락하실 수 있습니다.GitHub 토론 포럼또는 다음 주소로 이메일을 보내주세요.pldotnet@brickabode.com.