Có thể không? Tôi có thể chỉ định nó trên URL kết nối không? Làm thế nào để làm điều đó?
Có thể không? Tôi có thể chỉ định nó trên URL kết nối không? Làm thế nào để làm điều đó?
Câu trả lời:
Tôi biết điều này đã được trả lời, nhưng tôi chỉ gặp vấn đề tương tự khi cố gắng chỉ định lược đồ sẽ sử dụng cho dòng lệnh liquidibase.
Cập nhật Kể từ JDBC v 9.4, bạn có thể chỉ định url với tham số currentSchema mới như vậy:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Xuất hiện dựa trên một bản vá trước đó:
Các url được đề xuất như vậy:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
phương pháp JDCB sau khi tạo kết nối của bạn. Làm việc cho tôi với một trình điều khiển postgres gần đây.
postgresql-9.4.1209.jdbc42.jar
đã làm việc cùng với một 9.5
cơ sở dữ liệu và ?currentSchema=myschema
cú pháp.
Kể từ phiên bản 9.4 , bạn có thể sử dụng currentSchema
tham số trong chuỗi kết nối của mình.
Ví dụ:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Nếu có thể trong môi trường của bạn, bạn cũng có thể đặt lược đồ mặc định của người dùng thành lược đồ mong muốn của mình:
ALTER USER user_name SET search_path to 'schema'
Tôi không tin có một cách để xác định lược đồ trong chuỗi kết nối. Có vẻ như bạn phải thực thi
set search_path to 'schema'
sau khi kết nối được thực hiện để xác định lược đồ.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Tôi đã gửi một phiên bản cập nhật của một bản vá cho trình điều khiển JDBC PostgreSQL để cho phép điều này một vài năm trước. Bạn sẽ phải xây dựng trình điều khiển JDBC PostreSQL từ nguồn (sau khi thêm vào bản vá) để sử dụng nó:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Khi khởi tạo một DataSource
triển khai, hãy tìm một phương thức để đặt lược đồ hiện tại / mặc định.
Ví dụ, trong PGSimpleDataSource
cuộc gọi lớp 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_" ); // <----------
Nếu bạn để lược đồ không xác định, Postgres mặc định là lược đồ có tên public
trong cơ sở dữ liệu. Xem hướng dẫn, phần 5.9.2 Lược đồ công cộng . Để báo giá hướng dẫn sử dụng mũ:
Trong các phần trước, chúng ta đã tạo các bảng mà không chỉ định bất kỳ tên lược đồ nào. Theo mặc định, các bảng như vậy (và các đối tượng khác) sẽ tự động được đưa vào một lược đồ có tên là công khai. Mỗi cơ sở dữ liệu mới chứa một lược đồ như vậy.
search_path
Đừng quên SET SCHEMA 'myschema'
những gì bạn có thể sử dụng trong một Tuyên bố riêng
SET SCHema 'value' là bí danh cho giá trị SET search_path TO. Chỉ có một lược đồ có thể được chỉ định bằng cú pháp này.
Và kể từ phiên bản 9,4 và có thể trước đó trên trình điều khiển JDBC, có hỗ trợ cho setSchema(String schemaName)
phương thức này.
Trong Go với "sql.DB" (lưu ý search_path
với dấu gạch dưới):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Điều này đã được trả lời:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Như trong các câu trả lời trước, chuỗi kết nối ở trên chỉ hoạt động.
Tôi đã kiểm tra và không sao: https://youtu.be/m0lBUHSLkNM?t=79
(Mặc dù câu trả lời được chấp nhận đã được đưa ra 8 năm trước, nhưng nó đã được chỉnh sửa 1 năm trước ..)