PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ubah kolom PostgreSQL yang digunakan dalam tampilan

Solusi permanen untuk kasus ini

Untuk menghindari masalah sama sekali gunakan tipe data text atau varchar / character varying tanpa penentu panjang alih-alih character varying(n) . Baca tentang tipe data ini di manual.

CREATE TABLE monkey(name text NOT NULL)

Jika Anda benar-benar ingin menerapkan panjang maksimum, buat CHECK kendala :

ALTER TABLE monkey 
  ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);

Anda dapat mengubah atau melepaskan batasan itu kapan saja tanpa menyentuh objek yang bergantung seperti tampilan dan tanpa memaksa Postgres untuk menulis baris baru di tabel karena perubahan tipe (yang tidak selalu diperlukan lagi di Postgres versi modern).

Penjelasan detail

Seperti yang diusulkan oleh @Michael, saya menambahkan beberapa informasi umum lainnya:

Tampilan di PostgreSQL bukan hanya "alias untuk subquery". Tampilan diimplementasikan sebagai tabel khusus dengan aturan ON SELECT TO my_view DO INSTEAD . (Itulah mengapa Anda dapat mengubah tampilan dengan ALTER TABLE perintah.) Anda dapat GRANT hak istimewa untuk itu, menambahkan komentar atau bahkan menentukan default kolom (berguna untuk aturan ON INSERT TO my_view DO INSTEAD... ). Baca selengkapnya di manual di sini atau di sini.

Jika Anda mengubah objek yang mendasarinya, Anda juga perlu mengubah kueri pendefinisian dari setiap tampilan bergantung. ALTER VIEW pernyataan hanya dapat mengubah atribut tambahan dari suatu tampilan. Gunakan CREATE OR REPLACE VIEW untuk mengubah kueri - itu akan mempertahankan atribut tambahan apa pun.

Namun, jika Anda ingin mengubah tipe data dari kolom yang dihasilkan (seperti dalam kasus yang ada), CREATE OR REPLACE VIEW itu tidak mungkin. Anda harus DROP yang lama dan CREATE pandangan baru. Ini tidak akan pernah menghapus data apa pun dari tabel yang mendasarinya. Itu akan lepaskan atribut tampilan tambahan apa pun, yang juga harus dibuat ulang.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Koneksi Jarak Jauh ke PostgreSQL

  2. Apakah batasan UNIK Postgres menyiratkan indeks?

  3. psql:server menutup koneksi secara tidak terduga

  4. Berfungsi untuk menghilangkan aksen di postgreSQL

  5. Hibernasi:Buat Indeks