Является ли созданная строка времени уникальным в таблице?

Я знаю, что отметка времени - это момент времени на данный момент.

Но, подходя к моему столу, мой стол не имеет первичного ключа.

Поэтому мне нужен уникальный столбец для транзакций.

Должен ли я взять строку созданный столбец отметки времени имеет уникальный столбец таблицы.

Определение таблицы

Create Table order_processing_logs(
    order_number integer,
    processing_status integer,
    cust_id character varying(200),
    vendor_id character varying(200),
    .
    .
    .
    .
    .
    .,etc,
    created_time timestamp without time zone DEFAULT now(),
    updated_time timestamp without time zone DEFAULT now()
); 

Должен ли я взять create_time как уникальный столбец в таблице.

Прямо сейчас, если я изменил архитектуру таблицы, это повлияет на миллионы записей.

2 ответа

Решение

Нет. Обычно вы не можете быть уверены, что нет двух строк, которые приходят в одно и то же время.

Было бы более критично, если вы используете транзакции, в которых все строки фиксируются одновременно. Эта скрипка показывает, что метки времени равны для двух строк: demo: db<> fiddle

Может быть, вы могли бы использовать комбинацию из двух столбцов в качестве

PRIMARY KEY (order_number, current_timestamp)

Но так как вы не гарантируете уникальность каждого из столбцов (или комбинацию), вы никогда не будете в безопасности.


Всегда лучше добавить столбец с типом serial который автоматически увеличивается (bigint)число.

Начиная с Postgres 10 вы можете использовать GENERATE IDENTITY вместо serial тип:

id INT GENERATED ALWAYS AS IDENTITY

( http://www.postgresqltutorial.com/postgresql-identity-column/)

Я не думаю, что было бы разумно просто с помощью create_time, потому что 2 разных порядка могут размещаться одновременно

я предпочитаю сочетание order_number,created_time колонка для создания уникального

Другие вопросы по тегам