Answers:
我知道已经回答了这个问题,但是我遇到了同样的问题,试图指定用于liquibase命令行的架构。
更新 从JDBC v 9.4开始,您可以使用新的currentSchema参数指定url,如下所示:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
根据较早的补丁出现:
哪个提议的URL是这样的:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
创建连接后,尝试使用JDCB 方法。为我使用最新的postgres驱动程序。
postgresql-9.4.1209.jdbc42.jar
,它与9.5
数据库和?currentSchema=myschema
语法一起使用。
我不相信有一种方法可以在连接字符串中指定架构。看来您必须执行
set search_path to 'schema'
建立连接后指定架构。
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
我将修补程序的更新版本提交给PostgreSQL JDBC驱动程序,以实现此功能。您必须从源代码构建PostreSQL JDBC驱动程序(在添加补丁程序之后)才能使用它:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
– setCurrentSchema
在实例化DataSource
实现时,寻找一种设置当前/默认架构的方法。
例如,在PGSimpleDataSource
类调用上setCurrentSchema
。
org.postgresql.ds.PGSimpleDataSource dataSource = new org.postgresql.ds.PGSimpleDataSource ( );
dataSource.setServerName ( "localhost" );
dataSource.setDatabaseName ( "your_db_here_" );
dataSource.setPortNumber ( 5432 );
dataSource.setUser ( "postgres" );
dataSource.setPassword ( "your_password_here" );
dataSource.setCurrentSchema ( "your_schema_name_here_" ); // <----------
如果未指定架构,则Postgres默认为public
数据库中命名的架构。请参见手册第5.9.2节“公共模式”。引用帽子手册:
在前面的部分中,我们创建了没有指定任何模式名称的表。默认情况下,此类表(和其他对象)会自动放入名为“ public”的架构中。每个新数据库都包含这样的架构。
search_path
不要忘记SET SCHEMA 'myschema'
可以在单独的语句中使用的语句
SET SCHEMA'值'是SET搜索路径TO值的别名。使用此语法只能指定一个架构。
并且由于JDBC驱动程序上的9.4及更早版本,因此支持该setSchema(String schemaName)
方法。
在Go with“ sql.DB”中(注意search_path
带下划线):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
这已经被回答:
jdbc:postgresql:// localhost:5432 / mydatabase?currentSchema = myschema
与前面的答案一样,上述连接字符串也有效。
我已经检查了,没关系:https : //youtu.be/m0lBUHSLkNM?t=79
(尽管接受的答案是在8年前给出的,但它在1年前进行了编辑...)