Bir işlevin gövdesi yalnızca dize olarak saklanır . Referans verilen nesnelerin listesi yoktur. (Bu, örneğin referans verilen tablolara gerçek bağlantıların kaydedildiği görünümlerden farklıdır.)
Postgres 10 veya daha eski için bu sorgu , komut dosyasını ilgili işlevler için yeniden yapılandırmak üzere sistem kataloğu bilgi işlevinipg_get_functiondef() kullanır ve büyük /CREATE FUNCTION küçük harfe duyarlı olmayan normal ifadeyle tablo adını arar:
SELECT n.nspname AS schema_name
, p.proname AS function_name
, pg_get_function_arguments(p.oid) AS args
, pg_get_functiondef(p.oid) AS func_def
FROM pg_proc p
JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE NOT p.proisagg
AND n.nspname NOT LIKE 'pg_%'
AND n.nspname <> 'information_schema'
AND pg_get_functiondef(p.oid) ~* '\mbig\M';
İşi yapmalı, ama tabii ki kurşun geçirmez değil. Tablo adının dinamik olarak oluşturulduğu dinamik SQL için başarısız olabilir ve özellikle tablo adı ortak bir sözcükse, herhangi bir sayıda yanlış pozitif döndürebilir.
Toplama işlevleri ve sistem şemalarındaki tüm işlevler hariç tutulur.
\mve\M normal ifadede bir kelimenin başlangıcını ve sonunu işaretleyin.
Sistem katalog pg_procPostgres 11 değiştirilebilir proisaggile ikame edilmiştir prokind, gerçek saklanan prosedürleri ilave edildi. Uyum sağlamanız gerekiyor. İlişkili:
EXECUTEgibi ifadeler bulamaması açısından tamamen sağlam değil'mm_'||name_parameterve"my""table""vaka katlama veya vaka katlama ile alıntılanan isimlerle doğru bir şekilde başa çıkmayacak , ancak çoğu insanın isteyeceği şeylerin çoğunu yapacak .