Obtener valores por defecto para columnas de una tabla PostgreSQL

En PostgreSQL la forma de asignar valores automaticamente a una columna (AUTOINCREMENT en MariaDB, por ejemplo) es mediante la asociacion de una secuencia de la que obtener los valores para la columna. Esto se hace automaticamente sin que nos tengamos que preocupar si el tipo elegido para la columna al crearla es SERIAL, que equivale a asignar a dicha columna la propiedad IDENTITY del estandar SQL [1].

Pero si la tabla ya esta creada, poblada y en uso, que hay que hacer?

Pues hay que crear la secuencia y asignarsela a la columna explicitamente [2]:

CREATE SEQUENCE public.table_id_seq
    INCREMENT 1
    START 1000;

ALTER TABLE public.table
    ALTER COLUMN id SET DEFAULT nextval('table_id_seq')

ALTER SEQUENCE public.table_id_seq
    OWNER TO table.id;

COMMIT;

Y si ya he creado la sequencia y la he asociado a la columna pero se me ha olvidado decirle a la secuencia quien es su propietario/

Pues se le dice despues, no pasa nada;

ALTER SEQUENCE public.table_id_seq
    OWNED BY public.items.id;

Y ya que estamos, tengo otra columna para la que tambien quiero valores por defecto, pero esta vez quiero el momento de la insercion.

Esta es facil, basta con modificar la columna en cuestion:

ALTER TABLE public.items
ALTER COLUMN create_date SET DEFAULT current_timestamp;

Referencias:

  1. https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-SERIAL
  2. https://dba.stackexchange.com/a/78735/189526

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.