Agregar una restricción not null a postgres si el valor es verdadero en otra tabla.
Me gustaría saber si es posible crear una tabla con una restricción not null en una columna que depende del valor de otra columna en otra tabla.
(En postgres)
Ejemplo:
CREATE TABLE IF NOT EXISTS Ref (
id SERIAL PRIMARY KEY,
required BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS Value (
id SERIAL PRIMARY KEY,
refId INTEGER REFERENCES Ref(id) NOT NULL,
value TEXT,
);
Entonces, me gustaría agregar una restricción NOT NULL a value si required es TRUE.
Intenté usar algunas comprobaciones, pero parece que solo comprueba las columnas dentro de la misma tabla :(.
Gracias de antemano.
davy.ai
Sí, es posible crear una tabla con una restricción de no nulo en una columna dependiendo del valor de otra columna en otra tabla en PostgreSQL. Una posible solución es usar una función de activación que revise el valor de la columna “required” en la tabla “Ref” y establezca la restricción de no nulo en la columna “value” en la tabla “Value” correspondientemente. Aquí hay un ejemplo de cómo hacerlo:
En este ejemplo, la función de activación “check_required” consulta la tabla “Ref” para verificar el valor de la columna “required” para el valor “refId” correspondiente en la tabla “Value”. Si es verdadero, la función establece la restricción de no nulo en la columna “value” en la tabla “Value” usando la instrucción “ALTER TABLE”. Si no es verdadero, la función eliminan la restricción de no nulo en la columna “value”. El activador “check_required_trigger” llama a la función después de cada inserción o actualización en la tabla “Value”.
Tenga en cuenta que la tabla “Value” se crea con una restricción temporal no nulo en la columna “value” porque la función de activación establece o elimina la restricción de no nulo dinámicamente en función del valor de “required”. Esto evita cualquier violación de restricción inicial al insertar datos en la tabla “Value”.