Tidak dapat mengganti nama kolom dalam tampilan PostgreSQL dengan CREATE ATAU REPLACE

37

Di PostreSQL 8.3, saya mencoba membuat tampilan yang akan terlihat seperti tabel yang sudah ada tetapi memiliki nama kolom yang berbeda.

Ini bekerja

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;

Di atas membuat duplikat dari tabel family_tree tetapi upaya berikut gagal:

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;
  • GALAT: tidak dapat mengubah nama kolom tampilan "family_tree_id"

Bagaimana saya bisa mengganti nama kolom?

Aleksandr Levchuk
sumber

Jawaban:

45

Saya dapat mereproduksi kesalahan Anda ... dalam kasus saya, saya membuat kolom pertama sebagai 'tanggal' kemudian sebagai 'x' (mencoba untuk melihat apakah itu masalah dengan kata yang dipesan; itu bukan:

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

Jika Anda menerbitkan yang drop viewpertama, itu akan memungkinkan Anda membuat kembali tampilan dengan nama yang diubah. Saya tidak tahu mengapa create or replacetidak melakukannya.


Klarifikasi oleh Colin 't Hart :

The dokumentasi untukCREATE VIEW menjelaskan dengan cukup baik, saya pikir:

Kueri baru harus menghasilkan kolom yang sama dengan yang dihasilkan oleh permintaan tampilan yang ada (yaitu, nama kolom yang sama dalam urutan yang sama dan dengan tipe data yang sama), tetapi itu dapat menambahkan kolom tambahan ke akhir daftar.

Joe
sumber
Memang, Anda harus menambahkan kolom baru ke akhir daftar kolom SELECT , jika tidak Anda akan mendapatkan kesalahan!
1
Sedikit komentar di luar topik: Saya menghadapi masalah yang sama ketika mencoba untuk mengumpulkan data dari dua tabel dengan bantuan tampilan. Tetapi memang saya memiliki tipe yang berbeda ( VARCHARdi tabel pertama, dan TEXTdi tabel kedua) untuk kolom bernama sama. Saya menghabiskan banyak waktu untuk investigasi sampai saya perhatikan bahwa tampilan IDE VARCHARuntuk kedua tabel! Hanya murni yang pg_dumpmembantu saya.
flaz14
31

Anda dapat menggunakan ALTER TABLE tbl RENAME COLUMN foo TO baruntuk mengganti nama kolom tampilan juga.

Peter Eisentraut
sumber
Ada apa tbldisini apakah ini tabel aktual untuk tampilan yang dibuat atau ini adalah nama tampilan?
Eugen Konkov
@EugenKonkov Tampaknya menjadi pemandangan. Saya mengujinya dan berhasil
DatabaseShouter