No PostgreSQL, se o desenvolvedor tenta atualizar o tamanho de um campo, por exemplo de varchar(255) para varchar(512), o comando utilizado seria algo semelhante a este:
ALTER TABLE nome_da_tabela ALTER COLUMN nome_da_coluna TYPE varchar(512)
Porem se este campo está em alguma view, trigger ou procedimento armazenado do banco de dados, provavelmente o PostgreSQL vai exibir uma mensagem como esta:
ERROR: cannot alter type of a column used by a view or rule DETAIL: rule _RETURN on view nome_da_view depends on column "nome_da_coluna" ********** Error ********** ERROR: cannot alter type of a column used by a view or rule SQL state: 0A000 Detail: rule _RETURN on view nome_da_view depends on column "nome_da_coluna"
Uma solução possível seria remover esta view com o comando DROP VIEW, rodar o comando ALTER TABLE, e depois recriar a view novamente.
Mas se o banco de dados possui vários objetos relacionados a este campo, isto se tornaria uma tarefa muito difícil.
Então uma solução seria alterar as características deste campo diretamente nas configurações do banco de dados.
Por exemplo, vamos ver o tamanho atual do campo que vamos atualizar:
SELECT atttypmod FROM pg_attribute WHERE attrelid = 'nome_da_tabela'::regclass AND attname = 'nome_da_coluna';
Se o tamanho deste campo é 255, o valor retornado será 259 (4 e adicionado por razoes de compatibilidade). Bem com o sucesso desta consulta, podemos realizar o seguinte update:
UPDATE pg_attribute SET atttypmod = 512+4 WHERE attrelid = 'nome_da_tabela'::regclass AND attname = 'nome_da_coluna';







Deixar mensagem para Vitor Almeida Cancelar resposta