2012-02-04 42 views
1

在Postgres中是否有類似的東西,如SQL Server的UDF(其中一個函數可以在一個DLL中導出並作爲SQL Server中的函數導入)?Postgres的dllimport像SQL Server

比如我想導入功能具有以下特徵:

public static extern double* svd(double[] a, int d); 

的DLL導入看起來是這樣的:

[DllImport("D:\\my.dll", EntryPoint = "mydll")] 
+0

可能重複的[調用外部DLL從postgres .NET函數](http://stackoverflow.com/questions/841158/call-net-function-in-external-dll-from-postgres) – 2012-02-04 00:08:17

+1

這不是一個欺騙。請閱讀這個問題。 – codekaizen 2012-02-04 00:22:01

+0

@codekaizen第一個答案顯示瞭如何調用本機函數和託管函數調用的解決方法。我們在這裏沒有開創新局面。 – 2012-02-04 00:36:03

回答

0

您可以使用的Postgres的Create Function

CREATE FUNCTION svd(double*, int) RETURNS double* 
AS 'c:/path/mydll.dll' 
LANGUAGE 'C'; 

更多信息:http://www.postgresql.org/docs/current/static/xfunc-c.html

您可能需要使用複合類型,因爲它顯示您正在操作具有可變數量的行和列的矩陣。

+0

是的,我正在操縱矩陣,關於複合類型可以給你多一點細節? – cMinor 2012-02-04 00:42:56

+0

@cMinor您可以使用n維PostgreSQL數組來表示一個n維矩陣,因此您不必實現自己的數據類型。只需編寫一個接受double [] []數組的C函數並返回另一個double [] [],然後使用「CREATE FUNCTION」將其映射到SQL中。閱讀PostgreSQL源代碼示例 - 查找接收和/或返回n維數組並查看其C實現的函數。該文檔很好地涵蓋了C函數的基礎知識。 – 2012-02-06 07:27:18