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