pl/dotnet 為 PostgreSQL 添加了對 C# 和 F# 的完整支援。 0.99 是我們的公開 Beta 版本;我們希望與世界分享它的驚人之處。
這是一個 Beta 版本;我們歡迎使用並接受意見反應。
如何取得
更多詳細資訊如下。
pl/dotnet 讓您可以在 PostgreSQL 程序、函數和觸發器中使用 C# 和 F# 的完整功能。
CREATE OR REPLACE FUNCTION dynamic_record_generator_srf(lim INT8)
RETURNS SETOF record
AS $$
upperLimit = lim.HasValue ? lim : System.Int32.MaxValue;
for(long i=0;i<upperLimit;i++){ yield return new object?[] { i, $"Number is {i}" }; }
$$ LANGUAGE plcsharp;
CREATE OR REPLACE FUNCTION dynamic_record_generator_srf_fsharp(lim INT8)
RETURNS SETOF record
AS $$
let upperLimit = Option.defaultValue (int64 System.Int32.MaxValue) lim
seq { for i in 0L .. upperLimit - 1L do yield [| box i; $"Number is {i}" |] }
$$ LANGUAGE plfsharp;
我們支援所有 SQL 函數模式
我們支援 40 種 PostgreSQL 類型,所有類型都映射到其 NPGSQL 標準 dotnet 類型。 唯一值得注意的例外是 multirange、enum 和 struct 類型,我們希望將來添加它們。 所有資料類型都是可為空的,具有完整的陣列支援,並且已針對 C# 和 F# 進行完整的單元測試。(由於技術原因,格式為 (PostgreSQL 類型:Dotnet 類型) 的列表,而不是表格。)
bit
: BitArray
bool
: Bool
box
: NpgsqlBox
bpchar
: String
bytea
: Byte[]
cidr
: (IPAddress Address, Int Netmask)
circle
: NpgsqlCircle
date
: DateOnly
daterange
: NpgsqlRange<DateOnly>
float4
: Float
float8
: Double
inet
: (IPAddress Address, Int Netmask)
int2
: Short
int4
: Int
int4range
: NpgsqlRange<Int>
int8
: Long
int8range
: NpgsqlRange<Long>
interval
: NpgsqlInterval
json
: String
line
: NpgsqlLine
lseg
: NpgsqlLSeg
macaddr8
: PhysicalAddress
macaddr
: PhysicalAddress
money
: Decimal
path
: NpgsqlPath
point
: NpgsqlPoint
polygon
: NpgsqlPolygon
record
: Object?[]
text
: String
timestamp
: DateTime
timestamptz
: DateTime
time
: TimeOnly
timetz
: DateTimeOffset
tsrange
: NpgsqlRange<DateTime>
tstzrange
: NpgsqlRange<DateTime>
uuid
: Guid
varbit
: BitArray
varchar
: String
void
: Void
xml
: String
我們的 SPI 利用 NPGSQL 客戶端函式庫來提供本機 dotnet 實作,該實作與現有客戶端程式碼最大程度地相容。 我們在非常低的層級攔截了 NPGSQL 呼叫,以使用 SPI 呼叫替換客戶端協定處理; 否則,NPGSQL 未經修改。 我們將 NPGSQL 測試套件作為預存程序導入,並將其用於我們的測試,這使我們對我們的相容性等級有了很好的理解。
仍需努力改進相容性並新增功能。 我們持續失敗的最大類別 NPGSQL 測試是錯誤映射,因為 SPI 引發異常的方式與 NPGSQL 不同。 這種不相容性是微小的但數量眾多; 我們將繼續努力改進它們。
以下是我們目前測試的 SPI 操作
我們缺乏對 multirange、enum 和複合/表類型的支援。 我們打算添加它們。
我們的 SPI 實作缺少一些次要功能,例如子交易,並且我們有時會以與 NPGSQL 不同的(因此略有不相容的)方式引發錯誤。
我們的建置系統,包含 dpkg 和二進位輸出,功能完善,但不如我們希望的那樣整潔。
我們歡迎提交程式碼以解決任何這些問題,並且我們希望及時改進所有這些問題。
我們的作業系統支援
我們歡迎聽到來自社群的聲音。 您可以透過我們的 GitHub 討論區與我們聯繫,或發送電子郵件至 pldotnet@brickabode.com。