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 几何类型