Liquibase使用Postgis;Geometry&Quot;类型创建表格

2022-07-19 00:00:00 postgresql postgis spring java liquibase

我正在编写一个lisibase脚本来创建一个具有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

我还提到了liphbase-space扩展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[Main]警告 C.M.MS.BLOCK...应用液化基础- 应用Liqubase尝试5时出错:更改集迁移失败 Classpath:db/changelog/db.changelog-master.yaml::5-change-set-places::LongLe: 原因:iquibase.Exception.DatabaseException:Error:Type&Quot;Geomy&Quot;不存在位置:67[FAILED SQL:CREATE TABLE 测试方案.位置(id BIGINT非空,geom 几何图形(几何图形,4326)非空,约束位置_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;
然后,模式限定数据类型。如果扩展是在public中创建的,请使用

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

相关文章