Liquibase 使用 Postgis“几何”类型创建表

Posted

技术标签:

【中文标题】Liquibase 使用 Postgis“几何”类型创建表【英文标题】:Liquibase to create table with Postgis "Geometry" type 【发布时间】:2021-06-28 02:12:45 【问题描述】:

我正在编写一个 liquibase 脚本来创建一个带有 Geometry 列的表(来自 PostGreSQL DB 的 PostGis 扩展)

但是,我无法让它工作。我的脚本:

  - changeSet:
      id: 5-change-set-places
      comment: Create places table
      author: LongLe
      validCheckSum: 1:any
      changes:
        - sql:
            dbms: postgresql
            endDelimiter: ;
            splitStatements: true
            sql: |
              CREATE TABLE IF NOT EXISTS "$schema"."places" (
                "id" bigint NOT NULL,
                "geom" GEOMETRY(Geometry, 4326) NOT NULL
              );
              GRANT SELECT, INSERT, UPDATE, DELETE ON "$schema"."places" TO "$rolename";
              ALTER TABLE "$schema"."places"
                DROP CONSTRAINT IF EXISTS "places_pkey",
                ADD CONSTRAINT "places_pkey" PRIMARY KEY ("id");

但是,它失败并出现以下错误:

ERROR: type "geometry" does not exist

我还提到了 liquibase-spatial 扩展 https://github.com/lonnyj/liquibase-spatial 并编写了等效的配置:

  - changeSet:
      id: 5-change-set-places
      comment: Create places table
      author: LongLe
      validCheckSum: 1:any
      changes:
        - createTable:
            columns:
              - column:
                  constraints:
                    nullable: false
                    primaryKey: true
                    primaryKeyName: places_pkey
                  name: id
                  type: bigint
              - column:
                  constraints:
                    nullable: false
                  name: geom
                  type: GEOMETRY(Geometry,4326)
            tableName: test

但它仍然失败并出现错误:

31-03-2021 21:07:31.587 [主要] 警告 c.m.ms.block...applyLiquibase - 应用 liquibase 尝试 5 时出错:更改集迁移失败 类路径:db/changelog/db.changelog-master.yaml::5-change-set-places::LongLe: 原因:liquibase.exception.DatabaseException:错误:类型“几何”不存在位置:67 [失败的 SQL:CREATE TABLE testschema.places (id BIGINT NOT NULL, geom 几何(几何,4326)不为空,约束places_pkey 主键(id))]

但是当我从日志中取出SQL运行时:

CREATE TABLE testschema.places (id BIGINT NOT NULL, geom geometry(Geometry, 4326) NOT NULL, CONSTRAINT places_pkey PRIMARY KEY (id))

然后它就可以正常工作了。

我一定错过了一些非常简单的事情,但是我在没有任何线索的情况下检查了上下。谁有更好的主意?

【问题讨论】:

不确定,只是一个想法。您是否尝试过“CREATE EXTENSION postgis;”在使用扩展中的“几何”之前? 嗨@RakhiAgrawal,是的,我之前确实安装过 PostGis。在前面的脚本中添加了这个仍然会产生同样的问题 嗨@LaurenzAlbe 谢谢!原来这就是问题所在。我添加了一个 SQL 命令以将“public”包含到搜索路径中,它可以工作 【参考方案1】:

确保你已经运行

CREATE EXTENSION postgis;

然后架构限定数据类型。如果扩展是在public 中创建的,请使用

CREATE TABLE places (geom public.geometry, ...);

【讨论】:

以上是关于Liquibase 使用 Postgis“几何”类型创建表的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Spark JDBC DataFrame 中使用 Postgis 几何类型

使用 Gorm 插入和选择 PostGIS 几何

Postgis安装:类型“几何”不存在

在java中存储PostgreSQL/PostGIS“几何(多多边形)”数据类型

PostGIS的ST_Azimuth函数中几何与地理的区别

jetbrains datagrip 中是不是有 postgis 几何查看器?