Spring 带有postgresql和postgis扩展的flyway迁移
我的数据库中有两个模式:Spring 带有postgresql和postgis扩展的flyway迁移,spring,postgresql,postgis,flyway,Spring,Postgresql,Postgis,Flyway,我的数据库中有两个模式: CREATE SCHEMA my_schema; CREATE SCHEMA my_second_schema; 所以我创建了一个扩展 CREATE EXTENSION postgis VERSION "2.1.4"; 并将其很好地用于这两种模式 但是flyway 3.0仅适用于第一个模式,在my_second_模式上抛出错误: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException: Er
CREATE SCHEMA my_schema;
CREATE SCHEMA my_second_schema;
所以我创建了一个扩展
CREATE EXTENSION postgis
VERSION "2.1.4";
并将其很好地用于这两种模式
但是flyway 3.0仅适用于第一个模式,在my_second_模式上抛出错误:
org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException: Error executing statement at line 803: CREATE TABLE places (
id bigint DEFAULT nextval('places_sequence'::regclass) NOT NULL,
geo_location geometry,
created_at timestamp without time zone,
updated_at timestamp without time zone,
version bigint,
state boolean
)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:975)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:752)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:102)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)
... 23 more
Caused by: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException: Error executing statement at line 803: CREATE TABLE places (
id bigint DEFAULT nextval('places_sequence'::regclass) NOT NULL,
geo_location geometry,
created_at timestamp without time zone,
updated_at timestamp without time zone,
version bigint,
state boolean
)
at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:91)
at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:73)
at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:287)
at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:285)
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
at org.flywaydb.core.internal.command.DbMigrate.applyMigration(DbMigrate.java:285)
at org.flywaydb.core.internal.command.DbMigrate.access$800(DbMigrate.java:46)
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:207)
at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156)
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:864)
at org.flywaydb.core.Flyway$1.execute(Flyway.java:811)
at org.flywaydb.core.Flyway.execute(Flyway.java:1171)
at org.flywaydb.core.Flyway.migrate(Flyway.java:811)
at co.brandly.configuration.FlywayMigration.init(FlywayMigration.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1682)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1621)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550)
... 40 more
Caused by: org.postgresql.util.PSQLException: ERROR: type "geometry" does not exist
Позиция: 276
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:366)
at org.flywaydb.core.internal.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:235)
at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:89)
... 62 more
那么为什么会出现“错误:类型“几何体”不存在”
我的spring应用程序上下文:
<bean id="flyway" class="org.flywaydb.core.Flyway">
<property name="dataSource" ref="dataSource"/>
<property name="schemas" value="my_second_schema, my_schema"/>
<property name="validateOnMigrate" value="false"/>
<property name="outOfOrder" value="true"/>
<property name="placeholderPrefix" value="$flyway{"/>
<property name="placeholderSuffix" value="}"/>
<property name="placeholders">
<map>
<entry key="schema" value="${flyway.placeholders.schema}"/>
<entry key="schema_analytics" value="${flyway.placeholders.schema_analytics}"/>
</map>
</property>
</bean>
问题出在用户权限或其他方面
ALTER USER myuser WITH SUPERUSER;
这有助于嘿,您的问题可能是您没有在架构中添加所有扩展:
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
我希望它对您有所帮助。从flyway 3.1开始,有一个基线目标,执行该目标将把您的数据库视为一个现有数据库,在使用postigs\u模板创建数据库时,postgis功能已经导入到您的模式中 必须有更好的答案。这在AWS RDS中不起作用,例如,以rdsadmin操作的用户需要启用扩展。启用扩展后,可以创建几何图形列。