Це можливо? Чи можу я вказати його в URL-адресі підключення? Як це зробити?
Це можливо? Чи можу я вказати його в URL-адресі підключення? Як це зробити?
Відповіді:
Я знаю, що на це вже відповіли, але я просто зіткнувся з тією ж проблемою, намагаючись вказати схему, яку слід використовувати для командного рядка liquidibase.
Оновлення Станом на JDBC v 9.4, ви можете вказати URL з новим параметром currentSchema на зразок:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
З’являється на основі попереднього виправлення:
Який запропонований URL такий:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
методом JDCB після створення з'єднання. Для мене працює з недавнім драйвером postgres.
postgresql-9.4.1209.jdbc42.jar
працювали разом із 9.5
базою даних та ?currentSchema=myschema
синтаксисом.
Починаючи з версії 9.4 , ви можете використовувати currentSchema
параметр у рядку підключення.
Наприклад:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Якщо це можливо у вашому оточенні, ви також можете встановити схему користувача за замовчуванням на потрібну схему:
ALTER USER user_name SET search_path to 'schema'
Я не вірю, що існує спосіб вказати схему в рядку з'єднання. Здається, вам доведеться виконати
set search_path to 'schema'
після того, як з'єднання буде зроблено, щоб вказати схему.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Я подав оновлену версію патча до драйвера PostgreSQL JDBC, щоб увімкнути це кілька років тому. Вам доведеться створити драйвер JDBC PostreSQL з джерела (після додавання в патч), щоб використовувати його:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
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 Громадська схема . Цитувати посібник з капелюха
У попередніх розділах ми створювали таблиці, не вказуючи жодних назв схеми. За замовчуванням такі таблиці (та інші об'єкти) автоматично ставляться у схему під назвою "public". Кожна нова база даних містить таку схему.
search_path
Не забувайте, SET SCHEMA 'myschema'
що ви могли використовувати в окремій заяві
"Значення" SET SCHEMA - псевдонім для значення SET search_path TO. За допомогою цього синтаксису можна вказати лише одну схему.
А оскільки 9.4 та, можливо, більш ранні версії драйвера JDBC, існує підтримка setSchema(String schemaName)
методу.
У розділі "sql.DB" (зверніть увагу на search_path
підкреслення):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
На це вже відповіли:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Як і в попередніх відповідях, вищезазначений рядок з'єднання просто працює.
Я перевірив, і все в порядку: https://youtu.be/m0lBUHSLkNM?t=79
(Хоча прийняту відповідь було дано 8 років тому, вона була відредагована 1 рік тому.)