-- This file and its contents are licensed under the Apache License 2.0. -- Please see the included NOTICE for copyright information and -- LICENSE-APACHE for a copy of the license. -- Creates a constraint on a chunk. CREATE OR REPLACE FUNCTION _timescaledb_internal.chunk_constraint_add_table_constraint( chunk_constraint_row _timescaledb_catalog.chunk_constraint ) RETURNS VOID LANGUAGE PLPGSQL AS $BODY$ DECLARE chunk_row _timescaledb_catalog.chunk; hypertable_row _timescaledb_catalog.hypertable; constraint_oid OID; check_sql TEXT; def TEXT; BEGIN SELECT * INTO STRICT chunk_row FROM _timescaledb_catalog.chunk c WHERE c.id = chunk_constraint_row.chunk_id; SELECT * INTO STRICT hypertable_row FROM _timescaledb_catalog.hypertable h WHERE h.id = chunk_row.hypertable_id; IF chunk_constraint_row.dimension_slice_id IS NOT NULL THEN check_sql = _timescaledb_internal.dimension_slice_get_constraint_sql(chunk_constraint_row.dimension_slice_id); IF check_sql IS NOT NULL THEN def := format('CHECK (%s)', check_sql); ELSE def := NULL; END IF; ELSIF chunk_constraint_row.hypertable_constraint_name IS NOT NULL THEN SELECT oid INTO STRICT constraint_oid FROM pg_constraint WHERE conname=chunk_constraint_row.hypertable_constraint_name AND conrelid = format('%I.%I', hypertable_row.schema_name, hypertable_row.table_name)::regclass::oid; def := pg_get_constraintdef(constraint_oid); ELSE RAISE 'unknown constraint type'; END IF; IF def IS NOT NULL THEN EXECUTE format( $$ ALTER TABLE %I.%I ADD CONSTRAINT %I %s $$, chunk_row.schema_name, chunk_row.table_name, chunk_constraint_row.constraint_name, def ); END IF; END $BODY$;