我知道时间戳只是时刻的一个实例。
但是来到我的桌子上时,我的桌子没有主键。
所以我需要一个用于交易的唯一列。
我应该把行创建的时间戳列具有表的唯一列。
表定义
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用作表中的唯一列。
现在,如果我更改表的体系结构,它将影响数百万条记录。
答案 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
列以使其唯一