Como você remove uma restrição de verificação sem nome em uma tabela do PostgresQL?


9

Criei uma tabela do PostgresQL, mas adicionei uma restrição de verificação sem nome em uma das colunas:

CREATE TABLE FOO
(
id serial primary key,
price_range smallint CHECK (price_range > 0),
url varchar(255)
);

Agora eu quero remover essa restrição, mas não consigo descobrir como. O típico ALTER TABLE ... DROP CONSTRAINT ... precisa de um, constraint_namemas eu não tenho um.

Sei que há uma resposta aqui, mas quando tentei determinar o nome da minha restrição de cheque, siga a resposta:

SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'

Tudo o que recuperei foi uma única restrição cuja constraint_nameentrada se foo pkeyrefere à restrição de chave primária e não à minha verificação na pricecoluna. Portanto, essa resposta não me ajudou, a menos que esteja faltando alguma coisa.

Como posso eliminar essa restrição sem perder dados?

Obrigado!

Respostas:


10

A restrição tem um nome, você a especificou ou não.

No psql, \d foolistará todas as restrições de tabela, juntamente com seus nomes atribuídos automaticamente.

Você também pode encontrá-los consultando diretamente as tabelas de catálogos:

SELECT conname
FROM pg_constraint
WHERE
  conrelid = 'foo'::regclass AND
  contype = 'c'

O nome da tabela pode ser qualificado pelo esquema, se necessário (por exemplo 'public.foo'::regclass).

contype = 'c'filtra-o a CHECKrestrições; os contypevalores para outros tipos de restrição estão documentados aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.