本文介紹了Liquibase使用Postgis;Geometry&Quot;類型創建表格的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在編寫一個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, ...);
這篇關于Liquibase使用Postgis;Geometry&Quot;類型創建表格的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,