web-dev-qa-db-ja.com

Liquibaseはpostgresのスキーマを作成します

Dropwizard(1.0.0)とLiquibaseを使用して、データベースが存在しない場合は作成しています。

ここでの問題は、(パブリックではなく)別のPostgresスキーマを使用していることです。 Liquibaseは以前にこのスキーマを作成できないようです。 Liquibaseがこのスキーマを生成することを期待していましたが、データベースを構築しようとすると、「名前がxxのスキーマが見つかりません」が常にスローされます。

7
Christian

LiquibaseにはCREATE SCHEMAバンドルされた変更/リファクタリングで(したがって、ドロップウィザード中に生成されませんdb dump)、次のように sql tag を使用して、これをマイグレーションの変更ログに変更セットとして含めることもできます。

<changeSet author="christian" id="1">
    <sql dbms="postgresql" endDelimiter=";">
        CREATE SCHEMA foo
    </sql>
</changeSet>

Liquibaseは独自の独自のテーブルをに作成することに注意してくださいPUBLICスキーマに関係なく-変更セットを適用する前:
を実行した場合db migrate --dry-run dropwizardでは、Liquibaseが最初に実行されることがわかります

CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK ...
CREATE TABLE PUBLIC.DATABASECHANGELOG ...

走る前に

CREATE SCHEMA foo;
8
fspinnenhirn

質問への直接の回答ではありませんが、複数のスキーマでテーブルを作成することで、私がエラーに遭遇した人のために投稿しました。 defaultSchemaName構成でmavenからこれを実行するとエラーが発生しました。

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.6.2:update (default-cli) on project demo: Error setting up or running Liquibase: ERROR: relation "databasechangelog" already exists [Failed SQL: CREATE TABLE databasechangelog (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED TIMESTAMP WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INTEGER NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255), DEPLOYMENT_ID VARCHAR(10))] -> [Help 1]

以下の設定をpom.xmlに追加して修正しようとしましたが、それは部分的な解決策にすぎませんでした。

<defaultSchemaName>foo</defaultSchemaName>
<changelogSchemaName>foo</changelogSchemaName>

最後に、このように接続文字列の最後にfooを追加することで、この問題を解決しましたjdbc:postgresql://localhost:5432/postgres?currentSchema=foo

5
Abe