行创建的时间戳在表中是否唯一?

时间:2018-09-27 09:20:27

标签: sql postgresql postgresql-10 postgresql-11

我知道时间戳只是时刻的一个实例。

但是来到我的桌子上时,我的桌子没有主键。

所以我需要一个用于交易的唯一列。

我应该把行创建的时间戳列具有表的唯一列。

表定义

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()
); 

我应将created_time用作表中的唯一列。

现在,如果我更改表的体系结构,它将影响数百万条记录。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

我认为仅使用created_time是不明智的,因为可能在同一时间放置2个不同的顺序

我更喜欢结合order_number,created_time列以使其唯一