text: -- 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$;
  