使用JDBC连接到postgres时是否可以指定模式?

mar*_*igo 135 java database postgresql jdbc database-schema

可能吗?我可以在连接URL上指定它吗?怎么做?

Hir*_*o2k 183

我知道这已经得到了回答,但是我遇到了同样的问题,试图指定用于liquibase命令行的模式.

更新 从JDBC v 9.4开始,您可以使用新的currentSchema参数指定URL,如下所示:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Run Code Online (Sandbox Code Playgroud)

出现基于早期补丁:

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
Run Code Online (Sandbox Code Playgroud)

  • 尝试9.3-1101-jdbc41和9.1,对我不起作用 (8认同)
  • 我们还通过使用不同的(更新的)JDBC驱动程序解决了这个问题.在我们的例子中,`postgresql-9.4.1209.jdbc42.jar`与`9.5`数据库和`?currentSchema = myschema`语法一起工作. (7认同)
  • 是的但是在撰写本文时(2012年末),它不是[9.1驱动程序](http://jdbc.postgresql.org/documentation/91/)的一部分,请参阅:[连接参数](http:// jdbc.postgresql.org/documentation/91/connect.html#connection-parameters). (2认同)

Dis*_*tum 58

版本9.4开始,您可以currentSchema在连接字符串中使用该参数.

例如:

jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Run Code Online (Sandbox Code Playgroud)


chz*_*gla 48

如果在您的环境中可以,您还可以将用户的默认架构设置为所需的架构:

ALTER USER user_name SET search_path to 'schema'
Run Code Online (Sandbox Code Playgroud)

  • 如果需要,最好更改数据库本身,以便同一用户可以使用不同的 search_paths 连接到不同的数据库: ALTER DATABASE dbname SET search_path TO public,schemaname; (2认同)

小智 43

我不相信有一种方法可以在连接字符串中指定架构.看来你必须执行

set search_path to 'schema'
Run Code Online (Sandbox Code Playgroud)

在建立连接以指定架构之后.

  • 这对我有用,特别是使用“ Connection”实例运行:`Statement statement = connection.createStatement();。尝试{statement.execute(“将search_path设置为'” +模式+“'”); }最后{statement.close(); }` (2认同)

Raf*_*ros 8

在 Go 中使用“sql.DB”(注意search_path带下划线):

postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Run Code Online (Sandbox Code Playgroud)


Sco*_*ley 7

我向PostgreSQL JDBC驱动程序提交了一个补丁的更新版本,以便在几年前启用它.您必须从源代码构建PostreSQL JDBC驱动程序(在添加补丁后)才能使用它:

http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php

http://jdbc.postgresql.org/


Bas*_*que 6

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_" );  // <----------
Run Code Online (Sandbox Code Playgroud)

  • “*尝试连接到模式*” - 这有点误导。驱动程序不连接“到模式”,而是连接到_数据库_。查询使用哪个模式取决于 [`search_path`](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH) 的当前设置 (3认同)