PostgreSQL: Actualizar nulidades en columnas

Algo que se podría pensar como trivial en un motor de bases de datos, como lo es el actualizar/modificar las nulidades de una columna, en PostgreSQL resulta ser un poco mas complejo que un simple alter. He decidido compartir esto, ya que es algo que resulta bastante normal cuando se trabaja con bases de datos y por lo demás una problemática mas común de lo que se puede pensar.

A continuación un ejemplo en donde se define attnotnull como FALSE (Se permite NULL):

BEGIN;
UPDATE
pg_attribute
SET
attnotnull = FALSE
WHERE
attname = 'nombre_columna'
AND
attrelid = ( SELECT oid FROM pg_class WHERE relname = 'nombre_tabla') ;
COMMIT;

Para el caso contrario basta con dejar attnotnull como TRUE (No Se permite NULL), ya que este es de tipo boolean.

test=# \d pg_attribute
Tabla «pg_catalog.pg_attribute»
Columna | Tipo | Modificadores
---------------+------------+---------------
attrelid | oid | not null
attname | name | not null
[...]
attalign | "char" | not null
attnotnull | boolean | not null
atthasdef | boolean | not null
[...]

Una de las cosas que creo que es importante acotar, es que la columna relname de la tabla pg_class almacena el nombre de las tablas sin determinar el SCHEMA, esto lo pueden averiguar de manera sencilla haciendo la consulta por separado:

SELECT oid FROM pg_class WHERE relname = 'nombre_tabla'

Si retorna el oid es que esta bien, en caso contrario, algo están haciendo mal.

Con todo esto la columna ya debería contar con el nuevo atributo, permitiendo continuar con la música...

Comments

¿por que tanto atado?

Basta con un ALTER TABLE tabla ALTER columna SET NOT NULL y DROP NOT NULL

Back to top

Powered by drupal | Diseño de plantilla gracias a www.psql.it