【发布时间】:2011-05-09 07:05:22
【问题描述】:
有可能吗?我可以在连接 URL 上指定它吗?该怎么做?
【问题讨论】:
标签: java database postgresql jdbc database-schema
有可能吗?我可以在连接 URL 上指定它吗?该怎么做?
【问题讨论】:
标签: java database postgresql jdbc database-schema
我不相信有办法在连接字符串中指定架构。看来你必须执行
set search_path to 'schema'
建立连接后指定架构。
【讨论】:
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
如果在您的环境中可能,您还可以将用户的默认架构设置为您想要的架构:
ALTER USER user_name SET search_path to 'schema'
【讨论】:
我知道这已经得到解答,但我在尝试指定用于 liquibase 命令行的架构时遇到了同样的问题。
更新 从 JDBC v9.4 开始,您可以使用新的 currentSchema 参数指定 url,如下所示:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
基于较早的补丁出现:
建议的网址是这样的:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
【讨论】:
setSchema 方法。使用最近的 postgres 驱动程序为我工作。
postgresql-9.4.1209.jdbc42.jar 与 9.5 数据库和 ?currentSchema=myschema 语法一起使用。
几年前,我向 PostgreSQL JDBC 驱动程序提交了一个更新版本的补丁来启用它。您必须从源代码构建 PostreSQL JDBC 驱动程序(添加补丁后)才能使用它:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
【讨论】:
不要忘记SET SCHEMA 'myschema',您可以在单独的声明中使用它
SET SCHEMA 'value' 是 SET search_path TO value 的别名。只有一个 可以使用此语法指定架构。
自 9.4 及可能更早的 JDBC 驱动程序版本开始,支持 setSchema(String schemaName) 方法。
【讨论】:
从version 9.4 开始,您可以在连接字符串中使用currentSchema 参数。
例如:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
【讨论】:
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 节The Public Schema。引用帽子手册:
在前面的部分中,我们创建了表而不指定任何模式名称。默认情况下,此类表(和其他对象)会自动放入名为“public”的模式中。每个新数据库都包含这样的模式。
【讨论】:
search_path 的当前设置
在 Go 中使用“sql.DB”(注意 search_path 带有下划线):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
【讨论】: