CREATE OR REPLACE ile PostgreSQL görünümlerinde sütunlar yeniden adlandırılamıyor


37

PostreSQL 8.3'te, mevcut bir tabloya benzeyecek, ancak farklı sütun adlarına sahip olacak bir görünüm oluşturmaya çalışıyorum.

Bu çalışıyor

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;

Yukarıdaki, family_tree tablosunun bir kopyasını oluşturur, ancak aşağıdaki deneme başarısız olur:

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;
  • HATA: "family_tree_id" görünüm sütununun adını değiştiremez

Sütunları nasıl yeniden adlandırabilirim?

Yanıtlar:


44

Hatanızı çoğaltabilirim ... benim durumumda, önce 'tarih' sonra 'x' olarak bir sütun oluşturdum (ayrılmış bir kelimeyle sorun olup olmadığını görmeye çalışıyordu; öyle değildi:

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

Eğer bir sorunu varsa drop view, önce bunu değiştirilen adı görünümüyle yeniden oluşturabileceksin. Neden create or replaceyapmayacağına dair hiçbir fikrim yok.


Colin 't Hart'dan Açıklama :

İçin dokümantasyonCREATE VIEW oldukça iyi açıklıyor bence:

Yeni sorgu, mevcut görünüm sorgusu tarafından oluşturulan sütunları (aynı sırada ve aynı veri türlerinde aynı sütun adlarıyla) oluşturmalıdır, ancak listenin sonuna ek sütunlar ekleyebilir.


Gerçekten de, yeni sütunu SELECT sütun listesinin sonuna eklemelisiniz , aksi halde hata alırsınız!

1
Biraz konu dışı yorum: Verileri yardım alarak iki tablodan toplamaya çalışırken benzer bir sorunla karşılaştım. Ama aslında aynı adlandırılmış sütunlar için farklı türler vardı ( VARCHARilk tabloda ve TEXTikinci tabloda). IDE'nin VARCHARher iki tablo için de gösterdiğini fark edene kadar araştırma için çok zaman harcadım ! pg_dumpBana sadece saf yardımcı oldu.
flaz14

30

ALTER TABLE tbl RENAME COLUMN foo TO barGörünüm sütunlarını yeniden adlandırmak için de kullanabilirsiniz .


Nedir tblburada? Görünümün oluşturulduğu asıl tablo mu, yoksa görünümün adı mı?
Eugen Konkov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.