PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसे पता करें कि PostgreSQL में कोई फ़ंक्शन मौजूद है या नहीं?

हां, आपको pg_class . में फ़ंक्शन नहीं मिल रहे हैं क्योंकि फंक्शन सिस्टम टेबल pg_proc . पर स्टोर होते हैं

postgres-# \df
                               List of functions
 Schema |        Name        | Result data type | Argument data types  |  Type  
--------+--------------------+------------------+----------------------+--------
 public | foo                | integer          | a integer, b integer | normal
 public | function_arguments | text             | oid                  | normal
(2 rows)

pg_proc . पर आधारित कस्टम फ़ंक्शन की सूची के लिए क्वेरी बस है

postgres=# select p.oid::regprocedure
              from pg_proc p 
                   join pg_namespace n 
                   on p.pronamespace = n.oid 
             where n.nspname not in ('pg_catalog', 'information_schema');
           oid           
-------------------------
 foo(integer,integer)
 function_arguments(oid)
(2 rows)

फ़ंक्शन अस्तित्व पर सबसे सरल और सबसे तेज़ परीक्षण regproc या regprocedure (पैरामीटर के साथ) के लिए (पैरामीटर के बिना) कास्टिंग कर रहे हैं:

postgres=# select 'foo'::regproc;
 regproc 
---------
 foo
(1 row)

postgres=# select 'foox'::regproc;
ERROR:  function "foox" does not exist
LINE 1: select 'foox'::regproc;
               ^
postgres=# select 'foo(int, int)'::regprocedure;
     regprocedure     
----------------------
 foo(integer,integer)
(1 row)

postgres=# select 'foo(int, text)'::regprocedure;
ERROR:  function "foo(int, text)" does not exist
LINE 1: select 'foo(int, text)'::regprocedure;
               ^

या आप pg_proc . के विरुद्ध परीक्षण के साथ कुछ ऐसा ही कर सकते हैं

postgres=# select exists(select * from pg_proc where proname = 'foo');
 exists 
--------
 t
(1 row)

postgres=# select exists(select * 
                            from pg_proc 
                           where proname = 'foo' 
                             and function_arguments(oid) = 'integer, integer');
 exists 
--------
 t
(1 row)

कहां:

CREATE OR REPLACE FUNCTION public.function_arguments(oid)
RETURNS text LANGUAGE sql AS $function$
    select string_agg(par, ', ') 
       from (select format_type(unnest(proargtypes), null) par 
                from pg_proc where oid = $1) x
$function$

या आप बिल्डिन फ़ंक्शन का उपयोग कर सकते हैं:pg_get_function_arguments

अनुलेख सिस्टम कैटलॉग में सिंपल ओरिएंटेशन के लिए ट्रिक। एक psql का प्रयोग करें विकल्प -E :

[[email protected] ~]$ psql -E postgres
psql (9.2.8, server 9.5devel)
Type "help" for help.

postgres=# \df
********* QUERY **********
SELECT n.nspname as "Schema",
  p.proname as "Name",
  pg_catalog.pg_get_function_result(p.oid) as "Result data type",
  pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
 CASE
  WHEN p.proisagg THEN 'agg'
  WHEN p.proiswindow THEN 'window'
  WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
  ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE pg_catalog.pg_function_is_visible(p.oid)
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
ORDER BY 1, 2, 4;
**************************

                               List of functions
 Schema |        Name        | Result data type | Argument data types  |  Type  
--------+--------------------+------------------+----------------------+--------
 public | foo                | integer          | a integer, b integer | normal
 public | function_arguments | text             | oid                  | normal
(2 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql JSON को JSONB में माइग्रेट कर रहा है

  2. पोस्टग्रेज:प्रति डेवलपर सबसे लंबी स्ट्रीक (दिनों में) को परिभाषित करना

  3. TextField पर URLField का उपयोग करने के लाभ?

  4. -बैश:pg_dump:कमांड नहीं मिली

  5. मिडलवेयर का लारवेल ऑर्डर (मिडलवेयर प्रायोरिटी)। Postgres . का उपयोग कर बहु-किरायेदार