Nie. Próbowano go wiele razy i jest to uciążliwe.
Użyj zwykłego serial lub IDENTITY kolumna:
- Automatyczna inkrementacja kolumny tabeli
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
);
Użyj funkcji okna row_number() aby uzyskać numery seryjne bez przerw na person_id . Możesz utrwalić VIEW które możesz wykorzystać jako zamiennik dla swojej tabeli w zapytaniach, aby przygotować te liczby:
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;
Zobacz:
- Sekwencja bez luk, w której zaangażowanych jest wiele transakcji z wieloma tabelami
Lub możesz chcieć ORDER BY coś innego. Może created_at ? Lepiej created_at, address_history_id zerwać ewentualne więzi. Powiązana odpowiedź:
- Kolumna z alternatywnymi serialami
Ponadto typ danych, którego szukasz, to timestamp lub timestamptz , a nie w Postgresie:datetime
- Całkowite ignorowanie stref czasowych w Rails i PostgreSQL
Musisz tylko przechowywać previous_address (lub więcej szczegółów), a nie ani address . Oba byłyby zbędne w normalnym modelu danych.original_address