Saya menjalankan pencadangan harian database saya menggunakan pg_dump dan pg_restore yang baru-baru ini berhenti berfungsi setelah saya mendorong pembaruan.
Saya memiliki fungsi validate_id
yang merupakan pernyataan Case/When
hanya sebagai pemeriksaan cepat untuk beberapa data yang memiliki masalah integritas. Terlihat seperti ini:
CREATE OR REPLACE FUNCTION validate_id(
_string text,
_type type
) RETURNS boolean AS
$$
SELECT
CASE WHEN (stuff) THEN TRUE
WHEN (other stuff) THEN TRUE
When (more stuff) THEN raise_err('Not an accepted type, the accepted types are: x y z')
ELSE FALSE
$$
LANGUAGE SQL;
Sejak saya menambahkan fungsi ini, ketika saya membuang menggunakan perintah ini:
pg_dump -U postgres -h ipaddress -p 5432 -w -F t databaseName > backupsfolder/databaseName.tar
Ketika saya menggunakan perintah ini:
pg_restore -U postgres -h localhost -p 5432 -d postgres -C "backupsfolder/databaseName.tar"
Sejak dua hari yang lalu, sekarang terjadi kesalahan:
pg_restore: error: could not execute query: ERROR: function raise_err(unknown) does not exist
Saya sangat bingung harus berbuat apa. Saya rasa yang mungkin terjadi adalah ia mencoba memulihkan fungsi ini sebelum memulihkan fungsi raise_err
. Yang menurut saya sudah ada di dalam postgres (saya bisa SELECT raise_err('Hello, World');
). Apakah ini mungkin? Apakah ini pernyataan CASE
saya karena saya hanya perlu mengembalikan Boolean? Semua izin tampak benar dan pemulihan dengan cadangan sebelumnya berfungsi dengan baik.
psql
, dan lakukan\df+ raise_err
. Sejauh yang saya tahu, itu bukan fungsi standar. Anda tidak memerlukan fungsi lain untuk memunculkan kesalahan karena Anda cukup melakukanraise error
- person Mike Organek   schedule 21.08.2020sql
atau harusplpgsql
? - person HelpMeExitVim   schedule 21.08.2020\df+ raise_err
tidak...mengembalikan fungsinya. Ini bukanlah sesuatu yang saya ingat secara eksplisit dibuatnya, tetapi maksud saya, banyak hal terjadi. - person HelpMeExitVim   schedule 21.08.2020language sql
tidak akan mendukungnya, dan itu mungkin menjelaskan mengapa Anda menulisnya sebagai sebuah fungsi. Juga, iniraise exception
, bukanraise error
seperti yang saya katakan secara keliru di komentar saya sebelumnya. Sepertinya hal ini terkadang terjadi: stackoverflow.com/q/30707533/13808319 - person Mike Organek   schedule 21.08.2020CHECK
? Jika demikian, itu adalah createtable yang tidak-tidak: Saat ini, CHECK ekspresi tidak boleh memuat subkueri atau merujuk ke variabel selain kolom pada baris saat ini (lihat Bagian 5.4.1). Tabeloid kolom sistem dapat direferensikan, tetapi tidak pada kolom sistem lainnya. - person Adrian Klaver   schedule 21.08.2020language sql
mengacaukan upaya algo untuk menemukan dependensi selama pg_backup. - person Mike Organek   schedule 21.08.2020