PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Altere as colunas do PostgreSQL usadas nas visualizações

Solução permanente para este caso


Para evitar o problema, use o tipo de dados text ou varchar / character varying sem um especificador de comprimento em vez de character varying(n) . Leia sobre esses tipos de dados no manual.
CREATE TABLE monkey(name text NOT NULL)

Se você realmente deseja impor um comprimento máximo, crie um CHECK restrição :
ALTER TABLE monkey 
  ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);

Você pode alterar ou descartar essa restrição a qualquer momento sem tocar em objetos dependentes como visualizações e sem forçar o Postgres a escrever novas linhas na tabela devido à mudança de tipo (o que nem sempre é mais necessário na versão moderna do Postgres).

Explicação detalhada


Conforme proposto por @Michael, adiciono algumas informações mais gerais:

Uma visão no PostgreSQL não é apenas um "alias para subconsulta". As visualizações são implementadas como tabelas especiais com uma regra ON SELECT TO my_view DO INSTEAD . (É por isso que você pode alterar as visualizações com um ALTER TABLE comando.) Você pode GRANT privilégios a ele, adicionar comentários ou mesmo definir padrões de coluna (útil para uma regra ON INSERT TO my_view DO INSTEAD... ). Leia mais no manual aqui ou aqui.

Se você alterar os objetos subjacentes, também precisará alterar a consulta de definição de qualquer exibição dependente. A ALTER VIEW A instrução só pode alterar os atributos auxiliares de uma visão. Use CREATE OR REPLACE VIEW para alterar a consulta - ela preservará quaisquer atributos adicionais.

No entanto, se você quiser alterar os tipos de dados das colunas resultantes (como no caso em questão), CREATE OR REPLACE VIEW não é possível. Você tem que DROP o antigo e CREATE uma nova visão. Isso nunca excluirá nenhum dado das tabelas subjacentes. Ele vai no entanto, descarte quaisquer atributos adicionais da visualização, que também precisam ser recriados.