Mümkün mü? Bağlantı URL'sinde belirtebilir miyim? Bu nasıl yapılır?
Mümkün mü? Bağlantı URL'sinde belirtebilir miyim? Bu nasıl yapılır?
Yanıtlar:
Bunun zaten yanıtlandığını biliyorum, ancak aynı sorunla likibase komut satırı için kullanılacak şemayı belirlemeye çalışırken karşılaştım.
JDBC v 9.4'ten itibaren güncelle url'yi yeni currentSchema parametresiyle şu şekilde belirtebilirsiniz:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Daha önceki bir yamaya göre görünür:
Hangi önerilen url şöyle:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
Bağlantınızı oluşturduktan sonra JDCB yöntemini kullanmayı deneyin . Yeni bir postgres sürücüsü ile benim için çalışıyor.
postgresql-9.4.1209.jdbc42.jar
bir 9.5
veritabanı ve ?currentSchema=myschema
sözdizimi ile birlikte çalıştı .
İtibariyle sürümü 9.4 , kullanabileceğiniz currentSchema
bağlantı dizesinde parametresini.
Örneğin:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Ortamınızda mümkünse, kullanıcının varsayılan şemasını istediğiniz şemaya da ayarlayabilirsiniz:
ALTER USER user_name SET search_path to 'schema'
Bağlantı dizesinde şemayı belirtmenin bir yolu olduğuna inanmıyorum. Görünüşe göre yürütmen gerekiyor
set search_path to 'schema'
Şemayı belirtmek için bağlantı yapıldıktan sonra.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
DataSource
- setCurrentSchema
Bir DataSource
uygulama örneğini oluştururken , geçerli / varsayılan şemayı ayarlamak için bir yöntem arayın.
Örneğin, PGSimpleDataSource
sınıf görüşmesinde 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_" ); // <----------
Şemayı belirtmeden bırakırsanız, Postgres varsayılan olarak public
veritabanı içinde adlandırılan bir şemaya ayarlanır . Kılavuza bakın, bölüm 5.9.2 Genel Şema . Şapka kılavuzundan alıntı yapmak için:
Önceki bölümlerde herhangi bir şema adı belirtmeden tablolar oluşturduk. Varsayılan olarak bu tür tablolar (ve diğer nesneler) otomatik olarak "genel" adlı bir şemaya yerleştirilir. Her yeni veritabanı böyle bir şema içerir.
search_path
Birkaç yıl önce bunu etkinleştirmek için PostgreSQL JDBC sürücüsüne bir yamanın güncellenmiş bir sürümünü gönderdim. PostreSQL JDBC sürücüsünü kullanmak için kaynaktan (yamayı ekledikten sonra) oluşturmanız gerekir:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
SET SCHEMA 'myschema'
Ayrı bir İfadede hangisini kullanabileceğinizi unutmayın
ŞEMA AYARLA 'değer', arama_ yolu TO değerini SET için bir takma addır. Bu sözdizimi kullanılarak yalnızca bir şema belirtilebilir.
Ve JDBC sürücüsünün 9.4 ve muhtemelen önceki sürümlerinden beri, setSchema(String schemaName)
yöntem için destek vardır .
Go with "sql.DB" ( search_path
alt çizgi ile not edin ):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema