Mari kita perhatikan contoh berikut (dari awal skrip psql):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Sekarang jika dijalankan ini dengan perintah
psql [connection details] -v db_to_run_on=\'dev_database\'
lalu hanya berjalan dan pengguna senang. Tetapi bagaimana jika dia memutuskan untuk menentukan -v db_to_run_on=production_database
? (Mari kita asumsikan bahwa ini bisa terjadi, sama seperti orang-orang yang menjalankannya secara kebetulan rm -rf / # don't try this at home!!!
.) Mudah-mudahan ada cadangan baru dari tabel itu ...
Maka timbul pertanyaan: bagaimana cara memeriksa variabel yang diteruskan ke skrip dan menghentikan pemrosesan lebih lanjut berdasarkan nilainya?
sumber
\set ON_ERROR_STOP on
- bagus!PostgreSQL 10
PostgreSQL 10 membawa conditional ke psql. Ini bukan lagi masalah.
Saya kira Anda juga bisa menggunakan
DO
..sumber
\set ON_ERROR_STOP 1
dan kemudian\if yes
\endif
meminta psql versi 10 atau lebih tinggi. :) (Versi sebelumnya akan mengeluh tentang\if
tidak valid, dan kemudian berhenti.)Apa yang saya temukan berfungsi sangat baik bagi saya adalah menggunakan bahasa scripting untuk menghasilkan file SQL yang kemudian saya pipa ke psql, sesuatu seperti ini:
Lalu, saya menyebutnya dari skrip driver:
Skrip driver saya biasanya berupa file Rake, tetapi Anda mendapatkan idenya.
sumber
Jawaban dezso yang lebih ringkas:
Anda kemudian dapat memanggil ini seperti:
sumber