postgresql - procedure specific name rubrika: Databáze: SQL

2 petrbolf
položil/-a 9.1.2013

Zdravím,

potřeboval bych poradit se systémovým katalogem postgresql.

Zjišťuji si informace o uložených procedúrách z information_schema nějak takto:

SELECT specific_name, routine_name, data_type
    FROM information_schema.routines

a teď chci zjistit komentáře k těm funkcím. Ty jsou, jak jsem zjistil zřejmě jen v pg_catalog a získám je nějak takto:

SELECT p.proname AS funcname, d.description
 FROM pg_proc p
   INNER JOIN pg_namespace n ON n.oid = p.pronamespace
   LEFT JOIN pg_description As d ON (d.objoid = p.oid )
      WHERE n.nspname = 'public' AND p.proname LIKE 'moje_funkce'

Tak. A já mám přetížené funkce v pgsql, třeba takto

moje_funkce(int)
moje_funkce(character varying)

Takže z information schema získám dva záznamy
moje_funkce_XXXX moje_funkce int
moje_funkce_YYYY moje_funkce character varying

ale z pg_catalogu se přes to specific name neodkážu na patřičný záznam. Takže dostanu něco takovéhoto:
moje_funkce komentář_k_první funkci
moje_funkce komentář_k_druhé_funkci

Řešení znám, můžu předělat tu část aplikace, kde vyhledávám v information_schema a používat jen pg_catalog, ze kterého také zjistím potřebné informace. Ale to se mi nechce.

Je nějaké snadnější řešení?

odkaz
9 pavel.stehule
odpověděl/-a 12.1.2013
 
upravil/-a 12.1.2013

Když svůj dotaz rozšíříte o schéma parameters - které popisuje parametry funkcí, tak pak můžete jednoznačně určit hledanou funkci. Tyto pohledy mají sloupec specific_name, který je v pg názevfunkce_oid - z něj můžete získat oid - a potažmo komentář.

Ve chvíli, kdy už stejně přistupujete k pg_catalogu, tak podle mne není důvod to udělat kompletně nad pg_catalogem - navíc pg obsahuje pomocné datové typy, které zjednodušují vyhledávání v katalogu

select 'moje_func(int)'::regprocedure::oid;

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.