我在postgres中有一个将数据插入表中的函数,其中一列是point
类型的。
我不知道如何将我获得的数据保存到保存数据的函数的可接受形式。
有问题的代码是:
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来获取所需的库。之后,我创建了所需的扩展,现在我可以访问所需的功能。
答案 0 :(得分:4)
要安装PostGIS,请按照https://postgis.net/install上的操作系统说明进行操作。
然后,要在您的数据库上启用它,您可以从psql或PGAdmin执行CREATE EXTENSION postgis;
。
答案 1 :(得分:1)
我遇到了类似的问题,即使安装了postgis扩展程序并且我使用了正确的参数类型,postgres也找不到函数st_makepoint
。原来,搜索路径不包含postgis。
解决方案是:alter database my_db set search_path = my_schema, public, postgis;
希望它对某人有所帮助。