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.