No. Se ha intentado muchas veces y es un fastidio.
Usa un serial
simple o IDENTITY
columna:
- Columna de tabla de incremento automático
CREATE TABLE address_history (
address_history_id serial PRIMARY KEY
, person_id int NOT NULL REFERENCES people(id)
, created_at timestamp NOT NULL DEFAULT current_timestamp
, previous_address text
);
Utilice la función de ventana row_number()
para obtener números de serie sin espacios por person_id
. Podría persistir un VIEW
que puede usar como reemplazo directo de su tabla en las consultas para tener esos números listos:
CREATE VIEW address_history_nr AS
SELECT *, row_number() OVER (PARTITION BY person_id
ORDER BY address_history_id) AS adr_nr
FROM address_history;
Ver:
- Secuencia sin espacios donde están involucradas múltiples transacciones con múltiples tablas
O tal vez quieras ORDER BY
algo más. Quizás created_at
? Mejor created_at, address_history_id
para romper posibles lazos. Respuesta relacionada:
- Columna con publicaciones seriadas alternativas
Además, el tipo de datos que está buscando es timestamp
o timestamptz
, no en PostgreSQL:datetime
- Ignorar las zonas horarias por completo en Rails y PostgreSQL
Y solo necesita almacenar previous_address
(o más detalles), no , ni address
. Ambos serían redundantes en un modelo de datos sensato.original_address