Postgres扩展安装在公共架构中。
按以下方式设置DBCP数据源上应用程序特定架构的搜索路径:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" primary="true">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://myhost:myport/${db.gos_app.database}?searchpath=mySchema,public;?ApplicationName=${app.name}"/>
<property name="connectionProperties" value="currentSchema=mySchema;"/>
<property name="username" value="user"/>
<property name="password" value="pw"/>
<property name="defaultAutoCommit" value="false"/>
<property name="maxActive" value="6" />
</bean>
但不知怎的,我不能使用安装在这个公共模式中的扩展,除非对它们进行像“public.hstore”这样的限定。
最佳答案
找到解决方案-JDBC驱动程序不知道URL中的searchpath属性。但目前还没有任何报道:-(
相反,currentSchema被提供给驱动程序,驱动程序随后被映射到本地postgresearchpath(因此可能会用public included覆盖默认的postgresearchpath)。不是直觉!
所以解决方法如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" primary="true">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://myhost:myport/${db.gos_app.database}?ApplicationName=${app.name}"/>
<property name="connectionProperties" value="currentSchema=mySchema,public;"/>
<property name="username" value="user"/>
<property name="password" value="pw"/>
<property name="defaultAutoCommit" value="false"/>
<property name="maxActive" value="6" />