ไม่สามารถเปลี่ยนชื่อคอลัมน์ในมุมมอง PostgreSQL ด้วย CREATE หรือ REPLACE


37

ใน PostreSQL 8.3 ฉันพยายามสร้างมุมมองซึ่งจะดูเหมือนกับตารางที่มีอยู่ แต่มีชื่อคอลัมน์ที่แตกต่างกัน

วิธีนี้ใช้ได้ผล

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;

ด้านบนทำซ้ำตาราง family_tree แต่ความพยายามต่อไปนี้ล้มเหลว:

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;
  • ข้อผิดพลาด: ไม่สามารถเปลี่ยนชื่อคอลัมน์มุมมอง "family_tree_id"

ฉันจะเปลี่ยนชื่อคอลัมน์ได้อย่างไร

คำตอบ:


44

ฉันสามารถทำซ้ำข้อผิดพลาดของคุณ ... ในกรณีของฉันฉันสร้างคอลัมน์แรกเป็น 'วันที่' แล้วเป็น 'x' (พยายามที่จะดูว่ามันเป็นปัญหากับคำที่สงวนไว้หรือไม่:

ERROR:  cannot change name of view column "date" to "x"

หากคุณออกdrop viewครั้งแรกมันจะให้คุณสร้างมุมมองใหม่ด้วยชื่อที่ถูกเปลี่ยน ฉันไม่รู้ว่าทำไมcreate or replaceจะไม่ทำ


ชี้แจงโดยColin 't Hart :

เอกสารCREATE VIEWอธิบายว่ามันสวยดีผมคิดว่า:

แบบสอบถามใหม่จะต้องสร้างคอลัมน์เดียวกันที่สร้างขึ้นโดยแบบสอบถามมุมมองที่มีอยู่ (นั่นคือชื่อคอลัมน์เดียวกันในลำดับเดียวกันและมีชนิดข้อมูลเดียวกัน) แต่อาจเพิ่มคอลัมน์เพิ่มเติมในตอนท้ายของรายการ


แน่นอนคุณต้องเพิ่มโคลัมใหม่ไปยังส่วนท้ายของรายการคอลัมน์ SELECTมิฉะนั้นคุณจะได้รับข้อผิดพลาด!

1
ความคิดเห็นนอกหัวข้อเล็กน้อย: ฉันประสบปัญหาที่คล้ายกันเมื่อพยายามรวบรวมข้อมูลจากสองตารางด้วยความช่วยเหลือของมุมมอง แต่แน่นอนฉันมีประเภทที่แตกต่างกัน ( VARCHARในตารางแรกและTEXTในตารางที่สอง) สำหรับคอลัมน์ที่มีชื่อเดียวกัน ฉันใช้เวลามากในการตรวจสอบจนกว่าฉันจะสังเกตเห็นว่า IDE แสดงผลVARCHARสำหรับทั้งสองตาราง! บริสุทธิ์เท่านั้นที่pg_dumpช่วยฉัน
flaz14

30

คุณสามารถใช้ALTER TABLE tbl RENAME COLUMN foo TO barเพื่อเปลี่ยนชื่อคอลัมน์มุมมองได้เช่นกัน


ที่tblนี่คืออะไร เป็นตารางจริงที่สร้างมุมมองหรือนี่คือชื่อมุมมอง
Eugen Konkov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.