Ist es möglich? Kann ich es auf der Verbindungs-URL angeben? Wie geht das?
Ist es möglich? Kann ich es auf der Verbindungs-URL angeben? Wie geht das?
Antworten:
Ich weiß, dass dies bereits beantwortet wurde, aber ich bin auf dasselbe Problem gestoßen, als ich versucht habe, das Schema anzugeben, das für die Liquibase-Befehlszeile verwendet werden soll.
Update Ab JDBC 9.4 können Sie die URL mit dem neuen Parameter currentSchema wie folgt angeben:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Erscheint basierend auf einem früheren Patch:
Welche vorgeschlagene URL ist so:
jdbc:postgresql://localhost:5432/mydatabase?searchpath=myschema
setSchema
Methode zu verwenden, nachdem Sie Ihre Verbindung hergestellt haben. Funktioniert für mich mit einem aktuellen Postgres-Treiber.
postgresql-9.4.1209.jdbc42.jar
mit einer 9.5
Datenbank und der ?currentSchema=myschema
Syntax zusammengearbeitet.
Ab Version 9.4 können Sie den currentSchema
Parameter in Ihrer Verbindungszeichenfolge verwenden.
Beispielsweise:
jdbc:postgresql://localhost:5432/mydatabase?currentSchema=myschema
Wenn dies in Ihrer Umgebung möglich ist, können Sie auch das Standardschema des Benutzers auf das gewünschte Schema festlegen:
ALTER USER user_name SET search_path to 'schema'
Ich glaube nicht, dass es eine Möglichkeit gibt, das Schema in der Verbindungszeichenfolge anzugeben. Es scheint, dass Sie ausführen müssen
set search_path to 'schema'
Nachdem die Verbindung hergestellt wurde, geben Sie das Schema an.
Statement statement = connection.createStatement(); try { statement.execute("set search_path to '" + schema + "'"); } finally { statement.close(); }
Ich habe eine aktualisierte Version eines Patches an den PostgreSQL JDBC-Treiber gesendet, um dies vor einigen Jahren zu ermöglichen. Sie müssen den PostreSQL-JDBC-Treiber aus dem Quellcode erstellen (nachdem Sie den Patch hinzugefügt haben), um ihn verwenden zu können:
http://archives.postgresql.org/pgsql-jdbc/2008-07/msg00012.php
DataSource
- - setCurrentSchema
Suchen Sie beim Instanziieren einer DataSource
Implementierung nach einer Methode zum Festlegen des aktuellen / Standardschemas.
Zum Beispiel beim PGSimpleDataSource
Klassenaufruf 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_" ); // <----------
Wenn Sie das Schema nicht angegeben lassen, verwendet Postgres standardmäßig ein public
in der Datenbank benanntes Schema . Siehe Handbuch, Abschnitt 5.9.2 Das öffentliche Schema . Um das Handbuch zu zitieren:
In den vorherigen Abschnitten haben wir Tabellen ohne Angabe von Schemanamen erstellt. Standardmäßig werden solche Tabellen (und andere Objekte) automatisch in ein Schema mit dem Namen "public" eingefügt. Jede neue Datenbank enthält ein solches Schema.
search_path
Vergessen SET SCHEMA 'myschema'
Sie nicht, welche Sie in einer separaten Erklärung verwenden könnten
SET SCHEMA 'value' ist ein Alias für den Wert SET search_path TO. Mit dieser Syntax kann nur ein Schema angegeben werden.
Und seit 9.4 und möglicherweise früheren Versionen des JDBC-Treibers wird die setSchema(String schemaName)
Methode unterstützt.
In Go mit "sql.DB" (beachten Sie den search_path
mit Unterstrich):
postgres://user:password@host/dbname?sslmode=disable&search_path=schema
Dies wurde bereits beantwortet:
jdbc: postgresql: // localhost: 5432 / mydatabase? currentSchema = myschema
Wie in den vorherigen Antworten funktioniert die obige Verbindungszeichenfolge einfach.
Ich habe es überprüft und es ist in Ordnung: https://youtu.be/m0lBUHSLkNM?t=79
(Obwohl die akzeptierte Antwort vor 8 Jahren gegeben wurde, wurde sie vor 1 Jahr bearbeitet ...)