¿Cómo se cae una restricción de verificación sin nombre en una tabla PostgresQL?

9

Creé una tabla PostgresQL pero agregué una restricción de verificación sin nombre en una de las columnas:

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

Ahora quiero eliminar esta restricción pero no puedo entender cómo. La típica TABLA DE ALTERACIÓN ... DROP CONSTRAINT ... necesita un constraint_namepero no tengo uno.

Sé que hay una respuesta aquí, pero cuando intenté determinar el nombre de mi restricción de verificación siguiendo la respuesta allí:

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

Todo lo que obtuve fue una sola restricción cuya constraint_nameentrada se foo pkeyrefería a la restricción de clave principal y no a mi verificación en la pricecolumna. Entonces esa respuesta no me ayudó, a menos que me faltara algo.

¿Cómo puedo eliminar esta restricción sin perder ningún dato?

¡Gracias!

kilgoretrout
fuente

Respuestas:

10

La restricción tiene un nombre, lo haya especificado o no.

Desde psql, \d fooenumerará todas las restricciones de la tabla, junto con sus nombres asignados automáticamente.

También puede encontrarlos consultando las tablas del catálogo directamente:

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

El nombre de la tabla puede ser calificado por el esquema si es necesario (por ejemplo 'public.foo'::regclass).

contype = 'c'lo filtra a CHECKrestricciones; Los contypevalores para otros tipos de restricciones se documentan aquí .

Nick Barnes
fuente