{{/* Base constraint template */}} {{- define "constraint_base" -}} ALTER TABLE {{qual_table .SchemaName .TableName}} ADD CONSTRAINT {{quote_ident .ConstraintName}} {{block "constraint_definition" .}}{{end}}; {{- end -}} {{/* Drop constraint with check */}} {{- define "drop_constraint_safe" -}} DO {{dollar_delimiter}} BEGIN IF EXISTS ( SELECT 1 FROM information_schema.table_constraints WHERE table_schema = {{quote .SchemaName}} AND table_name = {{quote .TableName}} AND constraint_name = {{quote .ConstraintName}} ) THEN ALTER TABLE {{qual_table .SchemaName .TableName}} DROP CONSTRAINT {{quote_ident .ConstraintName}}; END IF; END; {{dollar_delimiter}}; {{- end -}} {{/* Add constraint with existence check */}} {{- define "add_constraint_safe" -}} DO {{dollar_delimiter}} BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.table_constraints WHERE table_schema = {{quote .SchemaName}} AND table_name = {{quote .TableName}} AND constraint_name = {{quote .ConstraintName}} ) THEN {{template "constraint_base" .}} END IF; END; {{dollar_delimiter}}; {{- end -}}