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
setSchemaMethode zu verwenden, nachdem Sie Ihre Verbindung hergestellt haben. Funktioniert für mich mit einem aktuellen Postgres-Treiber.
postgresql-9.4.1209.jdbc42.jarmit einer 9.5Datenbank und der ?currentSchema=myschemaSyntax zusammengearbeitet.
Ab Version 9.4 können Sie den currentSchemaParameter 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 - - setCurrentSchemaSuchen Sie beim Instanziieren einer DataSourceImplementierung nach einer Methode zum Festlegen des aktuellen / Standardschemas.
Zum Beispiel beim PGSimpleDataSourceKlassenaufruf 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 publicin 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_pathmit 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 ...)