PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan semua prosedural, fungsi yang ditentukan pengguna

Pertimbangkan:

select 
    pp.proname,
    pl.lanname,
    pn.nspname,
    pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal') 
  and pn.nspname NOT LIKE 'pg_%'
  and pn.nspname <> 'information_schema';

Lihat juga:Apa perintah untuk menemukan skrip fungsi yang ada di postgresql?

Gunakan pg_get_functiondef atau prosrc kolom dari pg_proc secara langsung. Ide kuncinya adalah bergabung di pg_namespace dan menyaring fungsi katalog PostgreSQL, yang mungkin akan memadai untuk sebagian besar tujuan:

FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'

Masalah dengan mendapatkan kode sumber untuk ditentukan pengguna fungsi memutuskan apa pengguna cara. Banyak jenis fungsi yang dapat dibuat:

  • Fungsi menggunakan CREATE EXTENSION .
  • Fungsi yang dibuat oleh PostgreSQL.
  • Fungsi dikompilasi dan diinstal oleh administrator.

Pengguna super dengan hibah yang cukup dapat mendefinisikan fungsi di pg_proc , tapi biasanya tidak.

Karena hanya pengguna super yang dapat membuat fungsi bahasa C, kecualikan mereka. Fungsi tersebut dapat diinstal secara khusus pada database tertentu oleh admin, tetapi bukan pengguna biasa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat pemicu untuk penyisipan tabel anak mengembalikan kesalahan yang membingungkan

  2. Permintaan postgres lambat saat bergabung dengan tabel besar

  3. Klien Postgres terkunci saat membuat tabel baru

  4. Bagaimana saya bisa menggunakan UUID di SQLAlchemy?

  5. Ruby on Rails:Apakah ada cara untuk menarik item dari database dan mengembalikannya dalam urutan tertentu?