ฉันสำรองข้อมูลฐานข้อมูลของฉันทุกวันโดยใช้ pg_dump และ pg_restore ที่เพิ่งหยุดทำงานหลังจากที่ฉันพุชการอัปเดต
ฉันมีฟังก์ชัน validate_id
ซึ่งเป็นคำสั่ง Case/When
เช่นเดียวกับการตรวจสอบข้อมูลบางส่วนที่มีปัญหาด้านความสมบูรณ์อย่างรวดเร็ว มีลักษณะดังนี้:
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;
เนื่องจากฉันเพิ่มฟังก์ชันนี้ เมื่อฉันดัมพ์โดยใช้คำสั่งนี้:
pg_dump -U postgres -h ipaddress -p 5432 -w -F t databaseName > backupsfolder/databaseName.tar
เมื่อฉันใช้คำสั่งนี้:
pg_restore -U postgres -h localhost -p 5432 -d postgres -C "backupsfolder/databaseName.tar"
เมื่อสองวันก่อน ตอนนี้เกิดข้อผิดพลาด:
pg_restore: error: could not execute query: ERROR: function raise_err(unknown) does not exist
ฉันค่อนข้างหลงทางว่าจะทำอย่างไร ฉันคิดว่าสิ่งที่อาจเกิดขึ้นคือพยายามกู้คืนฟังก์ชันนี้ก่อนที่จะกู้คืนฟังก์ชัน raise_err
ซึ่งฉันคิดว่ามีอยู่แล้วใน postgres (ฉันทำได้ SELECT raise_err('Hello, World');
) เป็นไปได้ไหม? มันเป็นคำสั่ง CASE
ของฉันหรือเปล่าเพราะฉันต้องส่งคืนเฉพาะ Booleans เท่านั้น การอนุญาตทั้งหมดดูเหมือนถูกต้องและการกู้คืนด้วยการสำรองข้อมูลก่อนหน้านี้ก็ใช้ได้ดี
psql
และทำ\df+ raise_err
นั่นไม่ใช่ฟังก์ชันมาตรฐานเท่าที่ฉันรู้ คุณไม่จำเป็นต้องมีฟังก์ชันอื่นในการเพิ่มข้อผิดพลาดเนื่องจากคุณสามารถทำได้raise error
- person Mike Organek   schedule 21.08.2020sql
หรือต้องเป็นplpgsql
? - person HelpMeExitVim   schedule 21.08.2020\df+ raise_err
ไม่...ส่งคืนฟังก์ชัน มันไม่ใช่สิ่งที่ฉันจำได้อย่างชัดเจนถึงการสร้าง แต่ฉันหมายถึง สิ่งต่างๆ เกิดขึ้น - person HelpMeExitVim   schedule 21.08.2020language sql
จะไม่รองรับ และนั่นอาจอธิบายได้ว่าทำไมคุณถึงเขียนมันเป็นฟังก์ชัน นอกจากนี้ มันคือraise exception
ไม่ใช่raise error
อย่างที่ฉันพูดผิดในความคิดเห็นก่อนหน้า ดูเหมือนว่าบางครั้งสิ่งนี้จะเกิดขึ้น: stackoverflow.com/q/30707533/13808319 - person Mike Organek   schedule 21.08.2020CHECK
หรือไม่ หากเป็นเช่นนั้น createtable ที่ไม่สามารถทำได้: ในปัจจุบัน ให้ตรวจสอบนิพจน์ ไม่สามารถมีแบบสอบถามย่อยหรืออ้างอิงถึงตัวแปรอื่นนอกเหนือจากคอลัมน์ของแถวปัจจุบัน (ดูหัวข้อ 5.4.1) คอลัมน์ระบบ tableoid อาจอ้างอิงได้ แต่ไม่ใช่คอลัมน์ระบบอื่นๆ - person Adrian Klaver   schedule 21.08.2020language sql
ทำให้อัลโกสับสนในการพยายามค้นหาการพึ่งพาระหว่าง pg_backup - person Mike Organek   schedule 21.08.2020