【发布时间】: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”包含到搜索路径中,它可以工作
标签: java spring postgresql postgis liquibase