我知道时间戳是某个时刻的时间实例。
但是来到我的表,我的表没有主键。
所以我需要一个唯一的交易列。
我应该采取行创建的时间戳列具有唯一的表列。
表定义
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作为表中的唯一列吗?
现在,如果我更改表的体系结构,它将影响数百万条记录。
No.通常,您无法确定没有两行
完全相同的时间。如果您使用的是同时提交所有行的事务,则更为关键。此小提琴显示两行的时间戳相等: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/(
我认为仅使用created_time是不明智的,因为 2 个不同的顺序可能同时放置
我更喜欢组合order_number,created_time
列以制作独特的