PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Серийни номера на група редове за съставен ключ

недей. Изпробвано е много пъти и е болка.

Използвайте обикновен serial или IDENTITY колона:

  • Колона на таблицата с автоматично увеличение
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
);

Използвайте функцията на прозореца row_number() за да получите серийни номера без пропуски за person_id . Можете да запазите VIEW които можете да използвате като добавка за заместване на вашата таблица в заявки, за да имате готови тези числа:

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;

Вижте:

  • Последователност без пропуски, където участват множество транзакции с множество таблици

Или може да искате да ORDER BY нещо друго. Може би created_at ? По-добре created_at, address_history_id да скъса евентуални връзки. Свързан отговор:

  • Колона с алтернативни сериали

Също така, типът данни, който търсите, е timestamp или timestamptz , а не datetime в Postgres:

  • Изцяло игнориране на часовите зони в Rails и PostgreSQL

И трябва само да съхраните previous_address (или повече подробности), а не address , нито original_address . И двете биха били излишни в разумен модел на данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи make_timestamp() в PostgreSQL

  2. GroupingError:ERROR:колоната трябва да се появи в клаузата GROUP BY или да се използва в агрегатна функция

  3. Как да добавя нова колона в таблица след 2-ра или 3-та колона в таблицата с помощта на postgres?

  4. Как да създадете индекс за елементи от масив в PostgreSQL?

  5. Хибернация, Postgresql:Колона x е от тип oid, но изразът е от тип байт