这可能吗?我可以在连接URL上指定它吗?怎么做呢?
我认为没有办法在连接字符串中指定模式。看来你得执行了
set search_path to 'schema'
在建立连接以指定模式之后。
如果在你的环境中可能,你也可以将用户的默认模式设置为你想要的模式:
ALTER USER user_name SET search_path to 'schema'
我知道这个问题已经得到了回答,但是我在尝试为liquibase命令行指定模式时遇到了同样的问题。
<强>更新 在JDBC v9.4中,你可以像这样用新的currentSchema参数指定url:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
根据之前的补丁显示:
http://web.archive.org/web/20141025044151/http://postgresql.1045698.n5.nabble.com/Patch-to-allow-setting-schema-search-path-in-the-connectionURL-td2174512.html
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
几年前,我向PostgreSQL JDBC驱动程序提交了一个更新版本的补丁来启用这个功能。你必须从源代码(在添加补丁后)构建PostreSQL JDBC驱动程序才能使用它:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php < a href = " http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php " > < / >
http://jdbc.postgresql.org/ < a href = " http://jdbc.postgresql.org/ " > < / >
不要忘记SET SCHEMA 'myschema',你可以在一个单独的语句中使用它
SET SCHEMA 'myschema'
SET SCHEMA 'value'是SET search_path TO value的别名。只有一个 . Schema可以使用这个语法指定
SET SCHEMA 'value'是SET search_path TO value的别名。只有一个
而且,从9.4开始,以及可能更早的JDBC驱动程序版本开始,就支持setSchema(String schemaName)方法。
setSchema(String schemaName)
从版本9.4开始,你可以在连接字符串中使用currentSchema参数。
currentSchema
例如:
在实例化DataSource实现时,寻找一个方法来设置当前/默认模式。
DataSource
例如,在PGSimpleDataSource类上调用setCurrentSchema。
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 Schema . /em> . /em>。引用帽子手册:
public
在前面的部分中,我们创建表时没有指定任何模式名。默认情况下,这些表(和其他对象)被自动放入一个名为“public”的模式中。每个新数据库都包含这样一个模式。
在Go中使用"sql.DB"(注意带有下划线的search_path):
search_path
postgres://user:password@host/dbname?sslmode=disable&search_path=schema