Ich habe eine Anwendung, die startet (AppStarter) einen Webserver mit einer Webanwendung. Die Webanwendung verfügt über Migrationsskripts (Flyway).ALTER TABLE CREATE CONSTRAINT WENN NICHT EXISTIEREN möglich?
Ich möchte einige Daten von AppStarter über JDBC in einer Tabelle schreiben. Aber ich möchte die Tabelle erstellen, wenn sie nicht existiert. Die Tabelle hat auch einige Einschränkungen.
Im AppStarter mir folgenden Befehl:
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;
Der Web-App liest auch einige Informationen aus dieser Tabelle und erstellt die Tabellen. Jetzt habe ich einen SQL-Migrationsskript
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
);
Aber wie erstelle ich die Einschränkung nur dann, wenn sie nicht bereits vorhanden ist?
Vielen Dank im Voraus
bekommen kann ich Zeit, wenn die Einschränkungen mit
select * from INFORMATION_SCHEMA.CONSTRAINTS WHERE CONSTRAINT_NAME='CURTRP_USER_ID'
existiert aber wie baue ich diese in eine, wenn Abfrage mit H2
Edit: ich konnte Verschieben Sie den Einschränkungsteil insgesamt in das Migrationsskript, aber das scheint irgendwie falsch zu sein.
Ich arbeite mit H2-Datenbank.
Haben Sie 'IF NOT EXISTS' versucht? Die Dokumentation scheint zu suggerieren, dass dies möglich ist http://www.h2database.com/html/grammar.html#constraint_name_definition – Sonata