上相同的changelog我努力讓自己在兩個不同的數據庫更新日誌的工作:MS SQL Server和PostgreSQL的。更新日誌在SQL Server上正常工作,但數據庫和字段的情況使它在PostgreSQL上中斷。我試過不使用引號(引發錯誤)並使用objectQuotingStategy="QUOTE_ALL_OBJECTS"
,這兩個都不起作用。的Postgres和MS SQL Server
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="create-PushApplication" author="me">
<createTable tableName="PushApplication">
<column name="ApplicationKey" type="NUMERIC(19,0)" autoIncrement="true" remarks="Unique id of the application">
<constraints primaryKey="true" primaryKeyName="PushApplication_PK" nullable="false" />
</column>
<column name="ApplicationId" type="VARCHAR(100)" remarks="Id of the application in the Push Server">
<constraints unique="true" uniqueConstraintName="PushApplication_U1" nullable="false" />
</column>
<column name="MasterSecret" type="VARCHAR(100)" remarks="Password for the application in the Push Server">
<constraints nullable="false" />
</column>
<column name="Name" type="VARCHAR(100)" remarks="Name of the application">
<constraints nullable="false" />
</column>
<column name="Description" type="VARCHAR(200)" remarks="Description of the application" />
<column name="DateCreated" type="DATETIME" remarks="Date the application was created" />
</createTable>
</changeSet>
<changeSet id="create-PushVariant" author="me">
<createTable tableName="PushVariant">
<column name="VariantKey" type="NUMERIC(19,0)" autoIncrement="true" remarks="Unique id of the variant">
<constraints primaryKey="true" primaryKeyName="PushVariant_PK" nullable="false" />
</column>
<column name="VariantId" type="VARCHAR(100)" remarks="Id of the variant in the Push Server">
<constraints unique="true" uniqueConstraintName="PushVariant_UK1" nullable="false" />
</column>
<column name="Secret" type="VARCHAR(100)" remarks="Password for the variant in the Push Server">
<constraints nullable="false" />
</column>
<column name="Name" type="VARCHAR(100)" remarks="Name of the variant">
<constraints nullable="false" />
</column>
<column name="Description" type="VARCHAR(200)" remarks="Description of the variant" />
<column name="ApplicationKey" type="NUMERIC(19,0)" remarks="Id of the application the variant belogns to">
<constraints nullable="false" foreignKeyName="PushVariant_FK1" references="PushApplication(ApplicationKey)" />
</column>
</createTable>
</changeSet>
</databaseChangeLog>
ERROR: relation "pushapplication" does not exist
表「PushApplication」 PostgreSQL裏創建,但是當它試圖創建「PushVariant」,這個錯誤被拋出外鍵。如果我改變所有的數據庫名和列名,以小寫
這將工作。但是,這會使SQL Server具有不正確的情況。
目標
的目標是有 「PushVariant」 在SQL Server和PostgreSQL中 「pushvariant」。
有沒有一種辦法,在更改日誌的情況下可以保持在SQL Server中,但是有它在PostgreSQL的小寫?
「*然而,這使得SQL Server有不正確的情況*」什麼是不正確的小寫字母名稱?如果你想跨越不同的DBMS兼容,你會**有一些妥協。無論如何,我個人比'PushVariant'更喜歡'push_variant'。與SQL標準相比,SQL Server保持大小寫的行爲與Postgres以小寫形式寫入所有內容的行爲相比是錯誤的。 SQL標準要求所有未加引號的標識符以大寫形式存儲。 –
@a_horse_with_no_name對於我們已經存在多年的當前模式,我們不使用SQL Server中的小寫名稱。如果它們變成小寫,它將不符合當前的設置。有了你最後的評論,我應該把所有東西都寫成大寫嗎? – Ascalonian
啊,好吧。所以,如果我真的想保留案例,創建不同的更新日誌。如果我不這樣做,請使用下劃線查看。謝謝!如果你可以請你的評論中的關鍵點創建一個答案,我會接受你的答案:-) – Ascalonian