【问题标题】:saving point type data to pg server将点类型数据保存到 pg 服务器
【发布时间】:2014-01-05 04:30:29
【问题描述】:

我在 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)。

谁能告诉我我做错了什么?

解决方案:

所以成功的方法就是按照这个link来获取需要的库。之后我创建了所需的扩展,现在我可以访问所需的功能了。

【问题讨论】:

  • 好像没有安装 PostGIS。 \df ST_MakePoint 的输出是什么?
  • yer 输出为 0 行。我在哪里安装 PostGIS?
  • 我试过apt-get install postgis,但它返回了一些字体包(dejavu)

标签: postgresql postgis


【解决方案1】:

要安装 PostGIS,请按照https://postgis.net/install 处的操作系统说明进行操作。

然后,要在您的数据库上启用它,您可以从 psql 或 PGAdmin 执行 CREATE EXTENSION postgis;

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,即使安装了 postgis 扩展并且我使用了正确的参数类型,postgres 也没有找到函数 st_makepoint。原来搜索路径不包含postgis。 解决方案是:alter database my_db set search_path = my_schema, public, postgis; 希望它可以帮助某人。

    【讨论】:

      【解决方案3】:

      我尝试重新安装 postgis 扩展并尝试了许多解决方案但对我不起作用。

      我只是编辑我的查询并将 extensions 关键字放在函数名称之前,如下所示:

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

      这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 2019-03-30
        • 2012-02-16
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        相关资源
        最近更新 更多