2014-01-05 38 views
1

我在postgres中有一個將數據插入表的功能,其中一列的類型爲point將點類型數據保存到pg服務器

我不知道如何將獲得的數據保存爲可接受的格式以保存我的數據。

有問題的有問題的代碼是:

CREATE OR REPLACE FUNCTION db."setMessage"(eml text, msg text, lat text, lng text) 

... 

INSERT INTO 
    db.messages 
VALUES 
    (DEFAULT, 
    id, 
    $2, 
    DEFAULT, 
    ST_SetSRID(ST_MakePoint($3::float, $4::float), 4326) 
    ); 

當我調用該函數是接收到的錯誤:

ERROR: function st_makepoint(double precision, double precision) does not exist 
SQL state: 42883 
Hint: No function matches the given name and argument types. You might need to add explicit type casts. 
Context: PL/pgSQL function "setMessage" line 9 at SQL statement 

我試圖保存的字符串格式點('POINT(12.22343 64.22233)'),嘗試不是施放st_makepoint參數,而是在沒有外部函數的情況下插入(ST_SetSRID)。

有人能告訴我我做錯了什麼嗎?

SOLUTION:

所以成功的方法,下面這個link獲得需要的庫。之後,我創建了所需的擴展,現在我可以訪問所需的功能。

+3

看起來像PostGIS沒有安裝。 \ df ST_MakePoint'的輸出是什麼? –

+0

你的輸出是0行。我在哪裏安裝PostGIS? –

+0

我試過'apt-get install postgis',但它返回了一些字體包(dejavu) –

回答

4

要安裝PostGIS,請按照http://postgis.net/install的操作系統說明進行操作。

然後,要啓用它在你的分貝你可以從psql或PGAdmin做CREATE EXTENSION postgis;

0

我有一個類似的問題,postgres沒有找到函數st_makepoint即使postgis擴展已安裝,我使用正確的參數類型。原來,搜索路徑不包含postgis。 解決方法是:alter database my_db set search_path = my_schema, public, postgis; 希望它有助於某人。

相關問題