2013-06-29 13 views
23

Bu, yapılması çok kolay olması gerektiği gibi geliyor, ancak nasıl yapılacağını ANYWHERE bulamıyorum. .sql dosyasında yazdırmak için yazdırma postgres

ben tablolar, ekler/güncelleştirmeleri değiştiren başvurumun yükseltmek için inşa ediyorum .sql dosyası, vb Her komut tamamlandıktan sonra ekrana yazmak istiyorum

var.

Dolayısıyla, örneğin ben böyle bir şey varsa:

tabloya eklemek için başlayan

insert into X... 

Ben böyle bir şey görmek istiyorum X sokmaya

bitirdi tablo X

Postgres'te bu mümkün mü?

+2

Psql tarafından yürütmek için, '\ echo komut dosyasını tabloya eklemek için X' ve etcet komutlarını ekleyebilirsiniz. – wildplasser

+0

Olası kopyası [PostgreSQL'de bir BİLDİRİM NASIL YÜKSELTİLİR?] (Http://stackoverflow.com/questions/18828127/how-to-raise-a-notice-in-postgresql) – FuriousFolder

cevap

28

Sadece büyük bir yığın SQL'i psql'a besliyorsanız, birkaç seçeneğiniz vardır.

Sen --echo-all ile psql çalıştırabilir: standart çıkışa

-a
--echo-all
Print Tüm giriş hatlarını onlar okunduğu gibi. Bu, betik işleme için etkileşimli modundan daha yararlıdır. Bu ECHO değişkenini all olarak ayarlamaya eşdeğerdir.

Bu ve diğer "Bu tip herşeyi echo" seçenekleri (the manual bakınız)

olsa muhtemelen çok gürültülü. Sadece el şeyler yazdırmak istiyorsanız, \echo kullanın:

\echotext [...] standart çıkışa
Baskılar argümanlar, bir yeni satır bir boşlukla ayrılmış ve izledi. Bu, komutların çıktısında bilginin kesişmesi için yararlı olabilir.

Yani söyleyebiliriz:

\echo 'Starting to insert into table X' 
-- big pile of inserts go here... 
\echo 'Finished inserting into table X' 
+1

HAHAHAHA ... " echo "ama yanlış eğim vardı! –

3

bunu yapmak için daha iyi bir yolu muhtemelen var. Eğer vanilya SQL kullanmak gerekiyorsa Ama, şunu deneyin:

SELECT NULL AS "Starting to insert into table X"; 
-- big pile of inserts go here... 
SELECT NULL AS "Finished inserting into table X"; 
5

Via:

DO language plpgsql $$ 
BEGIN 
    RAISE NOTICE 'hello, world!'; 
END 
$$; 

ne yaptığınızı bağlı https://stackoverflow.com/a/18828523/2014857, ben anonim kod bloklarının bir demet yapma hakkında endişeli olurdum . Yukarıdakileri bir işlev olarak saklamayı ve günlüğe kaydetmek istediğiniz değeri iletmeyi düşünebilirsiniz.