PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Променете колоните на PostgreSQL, използвани в изгледите

Постоянно решение за този случай

За да избегнете напълно проблема, използвайте типа данни text или varchar / character varying без спецификатор на дължина вместо character varying(n) . Прочетете за тези типове данни в ръководството.

CREATE TABLE monkey(name text NOT NULL)

Ако наистина искате да наложите максимална дължина, създайте CHECK ограничение :

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

Можете да промените или отхвърлите това ограничение по всяко време, без да докосвате зависими обекти като изгледи и без да принуждавате Postgres да пише нови редове в таблицата поради промяната на типа (което вече не винаги е необходимо в съвременната версия на Postgres).

Подробно обяснение

Както е предложено от @Michael, добавям още обща информация:

Изгледът в PostgreSQL не е просто "псевдоним на подзаявка". Изгледите се изпълняват като специални таблици с правило ON SELECT TO my_view DO INSTEAD . (Ето защо можете да променяте изгледите с ALTER TABLE команда.) Можете да GRANT привилегии към него, добавяне на коментари или дори дефиниране на колони по подразбиране (полезно за правило ON INSERT TO my_view DO INSTEAD... ). Прочетете повече в ръководството тук или тук.

Ако промените основните обекти, трябва да промените и определящата заявка на всеки зависим изглед. ALTER VIEW изразът може да променя само спомагателните атрибути на изглед. Използвайте CREATE OR REPLACE VIEW за да промените заявката - тя ще запази всички допълнителни атрибути.

Въпреки това, ако искате да промените типовете данни на получените колони (както в случая), CREATE OR REPLACE VIEW не е възможно. Трябва да DROP стария и CREATE нов изглед. Това никога няма да изтрие никакви данни от основните таблици. Тоще махнете всички допълнителни атрибути на изгледа, които също трябва да бъдат пресъздадени.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изградете SQL динамична заявка с psycopg2 python библиотека и използвайки добри инструменти за тип преобразуване

  2. Как да конвертирате низов случай в PostgreSQL

  3. Най-добри практики за сигурност на PostgreSQL

  4. Рефакторирайте функция PL/pgSQL, за да върнете изхода от различни SELECT заявки

  5. Индекс на долните букви на Flask-SQLAlchemy - функция за пропускане, не се поддържа от отражението на SQLAlchemy