sql >> Databáze >  >> RDS >> PostgreSQL

Dotaz PostgreSQL na seznam povolených hodnot v omezení?

Můžete se dotázat na systémový katalog pg_constraint , např.:

select consrc
from pg_constraint
where conrelid = 'requests'::regclass
and consrc like '(status%';

                                  consrc                                   
---------------------------------------------------------------------------
 (status = ANY (ARRAY['pending'::text, 'success'::text, 'failure'::text]))
(1 row) 

K rozbalení použijte následující funkci řetězec:

create or replace function get_check_values(str text)
returns setof text language plpgsql as $$
begin
    return query
        execute format (
            'select * from unnest(%s)',
            regexp_replace(str, '.*(ARRAY\[.*\]).*', '\1'));
end $$;

select get_check_values(consrc)
from pg_constraint
where conrelid = 'requests'::regclass
and consrc like '(status%';

 get_check_values 
------------------
 pending
 success
 failure
(3 rows)    


  1. Analýza XML s neznámými jmennými prostory v Oracle SQL

  2. Seskupit podle prvního písmene, abecedně, nejlepší způsob?

  3. LIKE vs CONTAINS na SQL Server

  4. Vyvarujte se sebeklamu v roztoku HA/DR