私はWebアプリケーションを使ってWebサーバーを起動(AppStarter)するアプリケーションを持っています。 Webアプリケーションには移行スクリプト(フライウェイ)があります。変更テーブルが存在しない場合、制約を作成できますか?
AppStarterからJDBCを介してテーブルにデータを書きたいとします。しかし、テーブルが存在しない場合は作成したいです。表にはいくつかの制約もあります。
AppStarter以内に私は、以下のコマンドを実行します。
CREATE CACHED TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER (
ID VARCHAR(32) PRIMARY KEY NOT NULL,
VERSION INTEGER,
USER_ID VARCHAR(32)NOT NULL,
ROLE_ID VARCHAR(32) NOT NULL,
PARAMETER VARCHAR(255) NOT NULL
);
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_USER_ID FOREIGN KEY(USER_ID) REFERENCES PUBLIC.CORE_USER(ID) NOCHECK;
ALTER TABLE PUBLIC.CORE_USERROLE_TO_PARAMETER ADD CONSTRAINT PUBLIC.CURTBP_ROLE_ID FOREIGN KEY(ROLE_ID) REFERENCES PUBLIC.CORE_USER_ROLE(ID) NOCHECK;
をウェブアプリは、このテーブルからいくつかの情報を読み取り、テーブルを作成します。 今私は、SQL移行スクリプト
CREATE CACHED TABLE IF NOT EXISTS PUBLIC.CORE_USERROLE_TO_PARAMETER (
ID VARCHAR(32) PRIMARY KEY NOT NULL,
VERSION INTEGER,
USER_ID VARCHAR(32)NOT NULL,
ROLE_ID VARCHAR(32) NOT NULL,
PARAMETER VARCHAR(255) NOT NULL
);
を持っていますが、どのように私は、彼らがまだ存在しない場合にのみ制約を作成するのですか? 私ができる:制約が
select * from INFORMATION_SCHEMA.CONSTRAINTS WHERE CONSTRAINT_NAME='CURTRP_USER_ID'
が、どのように私はH2
を編集している場合、クエリにこれを構築しないと存在する場合は、事前
で
おかげで現在、私は得ることができます合計で制約部分を移行スクリプトに移動しますが、これは何らかの形で間違っているようです。
私はH2データベースを使用しています。
「IF NOT EXISTS」を試しましたか?ドキュメントはこれが可能であることを示唆しているようですhttp://www.h2database.com/html/grammar.html#constraint_name_definition – Sonata