es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta para los valores permitidos en una restricción.

Quiero extraer los valores de una restricción CHECK en una tabla de base de datos. El código es:

CONSTRAINT Shop_check_serviceType CHECK (service_type IN ('food or drink', 'entertainment', 'retail'))

En Postgres 12 hay una columna llamada consrc en pg_catalog.pg_constraint. Pero estoy usando Postgres 14 y no sé cómo extraer los valores allí. He intentado buscar en el manual sin éxito.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer valores de una restricción CHECK en Postgres 14, puedes usar la siguiente consulta:

    SELECT substring(consrc, 
                     position('(' IN consrc)+1, 
                     position(')' IN consrc)-(position('(' IN consrc)+1)) AS valores
    FROM pg_catalog.pg_constraint
    WHERE confrelid = 'your_table'::regclass
          AND contype = 'c'
          AND conname = 'Shop_check_serviceType';
    

    Explicación:

    • La función substring() extrae una subcadena de la columna consrc.
    • La función position() encuentra la posición de una subcadena dentro de otra cadena.
    • pg_catalog.pg_constraint es una tabla de catálogo que almacena información sobre las restricciones de la tabla.
    • La columna confrelid en pg_catalog.pg_constraint almacena el oid de la tabla para la cual se define la restricción.
    • ::regclass es un tipo de conversión a tipo regclass, que se utiliza para convertir un nombre de tabla a su oid.
    • La condición contype = 'c' selecciona solo restricciones CHECK.
    • La condición conname = 'Shop_check_serviceType' selecciona una restricción con un nombre específico.

    Ten en cuenta que la consulta anterior asume que la restricción CHECK está definida en una sola columna (service_type). Si la restricción utiliza varias columnas, debes modificar la consulta en consecuencia.

Comments are closed.