Estou adicionando uma nova coluna "NOT NULL" ao meu banco de dados Postgresql usando a seguinte consulta (higienizada para a Internet):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Cada vez que executo essa consulta, recebo a seguinte mensagem de erro:
ERROR: column "mycolumn" contains null values
Estou perplexo. Onde eu estou errando?
NOTA: Estou usando principalmente o pgAdmin III (1.8.4), mas recebi o mesmo erro ao executar o SQL no Terminal.
sql
postgresql
alter-table
Huuuze
fonte
fonte
man ALTER_TABLE
:)Como outros observaram, você deve criar uma coluna anulável ou fornecer um valor PADRÃO. Se isso não for flexível o suficiente (por exemplo, se você precisar que o novo valor seja calculado para cada linha individualmente de alguma forma), você pode usar o fato de que no PostgreSQL todos os comandos DDL podem ser executados dentro de uma transação:
fonte
Como as linhas já existem na tabela, a
ALTER
instrução está tentando inserirNULL
na coluna recém-criada para todas as linhas existentes. Você precisaria adicionar a coluna como permitirNULL
, em seguida, preencha a coluna com os valores desejados e defina-aNOT NULL
posteriormente.fonte
Você precisa definir um padrão ou fazer o que Sean diz e adicioná-lo sem a restrição nula até preenchê-lo nas linhas existentes.
fonte
A especificação de um valor padrão também funcionaria, assumindo que um valor padrão seja apropriado.
fonte
Ou, crie uma nova tabela como temp com a coluna extra, copie os dados para essa nova tabela enquanto manipula-os conforme necessário para preencher a nova coluna não anulável e, em seguida, troque a tabela por uma alteração de nome em duas etapas.
Sim, é mais complicado, mas você pode precisar fazer dessa maneira se não quiser uma grande atualização em uma mesa ativa.
fonte
esta consulta atualizará automaticamente os nulos
fonte
Isso funcionou para mim: :)
fonte
NOT NULL
restrição na sua consulta. Claro que está funcionando.