Apa itu mungkin? Bisakah saya menentukannya di URL koneksi? Bagaimana cara melakukannya?
Apa itu mungkin? Bisakah saya menentukannya di URL koneksi? Bagaimana cara melakukannya?
Jawaban:
Saya tahu ini sudah dijawab, tetapi saya hanya mengalami masalah yang sama mencoba menentukan skema yang akan digunakan untuk baris perintah liquibase.
Pembaruan pada JDBC v 9.4 Anda dapat menentukan url dengan parameter currentSchema baru seperti:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Muncul berdasarkan tambalan sebelumnya:
Yang diusulkan url seperti:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
metode JDCB setelah membuat koneksi Anda. Bekerja untuk saya dengan driver postgres baru-baru ini.
postgresql-9.4.1209.jdbc42.jar
bekerja sama dengan 9.5
database dan ?currentSchema=myschema
sintaksis.
Jika memungkinkan di lingkungan Anda, Anda juga dapat mengatur skema default pengguna ke skema yang Anda inginkan:
ALTER USER user_name SET search_path to 'schema'
Saya tidak percaya ada cara untuk menentukan skema di string koneksi. Tampaknya Anda harus menjalankan
set search_path to 'schema'
setelah koneksi dibuat untuk menentukan skema.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Saya mengirimkan versi tambalan yang diperbarui ke driver JDBC PostgreSQL untuk mengaktifkannya beberapa tahun yang lalu. Anda harus membangun driver JDBC PostreSQL dari sumber (setelah menambahkan dalam tambalan) untuk menggunakannya:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- setCurrentSchema
Saat instantiasi a DataSource
implementasi, cari metode untuk mengatur skema saat ini / default.
Misalnya, pada PGSimpleDataSource
panggilan kelas 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_" ); // <----------
Jika Anda membiarkan skema tidak ditentukan, Postgres default ke skema yang bernama public
dalam database. Lihat manual, bagian 5.9.2 Skema Publik . Mengutip manual topi:
Di bagian sebelumnya kami membuat tabel tanpa menentukan nama skema apa pun. Secara default tabel seperti itu (dan objek lainnya) secara otomatis dimasukkan ke dalam skema bernama "publik". Setiap database baru berisi skema semacam itu.
search_path
Jangan lupa SET SCHEMA 'myschema'
yang dapat Anda gunakan dalam Pernyataan terpisah
SET SCHEMA 'value' adalah alias untuk nilai SET search_path TO. Hanya satu skema yang dapat ditentukan menggunakan sintaks ini.
Dan sejak 9.4 dan mungkin versi sebelumnya pada driver JDBC, ada dukungan untuk setSchema(String schemaName)
metode ini.
In Go with "sql.DB" (perhatikan search_path
dengan garis bawah):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Ini sudah dijawab:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Seperti pada jawaban sebelumnya, string koneksi di atas hanya berfungsi.
Saya sudah memeriksa, dan tidak apa-apa: https://youtu.be/m0lBUHSLkNM?t=79
(Meskipun jawaban yang diterima diberikan 8 tahun yang lalu, itu diedit 1 tahun yang lalu ...)