PostgreSQL: Incremento automático basado en una restricción única de varias columnas

Una de mis tablas tiene la siguiente definición:

CREATE TABLE incidents
(
  id serial NOT NULL,
  report integer NOT NULL,
  year integer NOT NULL,
  month integer NOT NULL,
  number integer NOT NULL, -- Report serial number for this period
  ...
  CONSTRAINT PRIMARY KEY (id),
  CONSTRAINT UNIQUE (report, year, month, number)
);

¿Cómo iría incrementar la columna número para cada informe , año y mes de forma independiente ? Me gustaría evitar crear una secuencia o una tabla para cada conjunto de ( informe , año , mes ).

Sería bueno que PostgreSQL permitiera incrementar " en una columna secundaria en un índice de varias columnas "como las tablas MyISAM de MySQL, pero no pude encontrar una mención de tal característica en el manual .

Una solución obvia es seleccionar el valor actual en la tabla + 1, pero esto obviamente no es seguro para sesiones concurrentes. Tal vez un disparador de preinserción funcionaría, pero ¿se garantiza que no sean concurrentes?

También tenga en cuenta que estoy en insertando incidentes individualmente, por lo que no puedo usar generate_series como se sugiere en otro lugar .

15
задан Community 23 May 2017 в 12:00
поделиться