2012-12-07 13 views

cevap

36

pg_getfunctiondef; system information functions'a bakın. PostgreSQL 8.4'te pg_getfunctiondef eklenmiştir.

SELECT pg_get_functiondef('proc_name'::regproc); 

Eğer pg_catalog sistem tabloları sorgulayabilir bir şemada tüm fonksiyonları dökümü için; Eğer public her şeyi istiyorsa ki:

SELECT pg_get_functiondef(f.oid) 
FROM pg_catalog.pg_proc f 
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid) 
WHERE n.nspname = 'public'; 

o istediğini yerine eğer "pg_ ile başlayan dışındaki tüm şemalar gelen" söylemek yukarıdaki değiştirmek için Önemsiz. ,

psql -At dbname > /path/to/output/file.sql <<"__END__" 
... the above SQL ... 
__END__ 

başka DB çıkışını çalıştırmak için böyle bir şey kullanın::

psql size bir dosyaya bu dökümü

psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name 

sizin gibi veritabanları arasında fonksiyonlarını kopyalayan ediyorsanız Bununla birlikte, bu, fonksiyon tanımlarının birer kopyasını, bir PostgreSQL uzantısı olarak paketlenmiş, svn veya git gibi bir revizyon kontrol sisteminde bir SQL betiği olarak saklamayı düşünür. Bakınız packaging extensions.

+0

Ayrıca ben bu işlevleri başka bir db.How.Iyi yapabilir miyim.İşlevleri sadece – vmb

+0

@vmb geri yüklemek gerekiyor Çıkış, SQL fonksiyon tanımları, bu yüzden onları psql içine boru. Güncellenmiş cevaba bakınız. Daha da iyisi, bir uzantı oluşturun ve bunları paketleyin. –

+1

Dikkat edilmelidir ki, 'pg_get_functiondef ('proc_name' :: regproc)' **, fonksiyon tanımının bir parçası olarak düşünülebilecek fonksiyonun ayrıcalıklarını ("GRANT" ve "REVOKE" ifadeleri) boşa çıkarmaz. – NumberFour

17

Yalnızca işlevleri boşaltmak için pg_dump ürününü söyleyemezsiniz. Ancak, bir dökümü veri olmadan (-s) yapabilir ve geri yüklemek için filtreleyebilirsiniz. -Fc bölümüne dikkat edin: bu, pg_restore için uygun bir dosya üretecektir.

pg_dump -U username -Fc -s -f dump_test your_database 

Sonra fonksiyonların listesini oluşturmak: Öncelikle dökümü almak

pg_restore -U username -d your_other_database -L function_list dump_test 
: nihayet

pg_restore -l dump_test | grep FUNCTION > function_list 

Ve onları geri (-L yukarıda oluşturulan liste dosyası belirtir)

+0

Belki de ilk iki komut 'pg_dump -U kullanıcıadı -s veritabanına indirgenebilir. grep FONKSİYONU> function_list' – Minutis

+0

@Minutis Fonksiyon tanımları _all_ tek linerler olmadıkça çalışmaz. – dezso

+1

Sadece bunu denedim ve ilk yorumumdaki çözümün doğru olmadığını doğrulayabilir. – Minutis