0

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

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

所以我需要一个独特的交易列。

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

表定义

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 作为表中的唯一列吗?

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

4

2 回答 2

2

不会。通常情况下,您不能确定没有两行完全相同。

如果您使用的是同时提交所有行的事务,那将更为关键。这个小提琴表明两行的时间戳是相等的:demo: db<>fiddle

也许你可以使用两列的组合作为

PRIMARY KEY (order_number, current_timestamp)

但是,由于您不能确保每个列(或组合)的唯一性,您将永远不会安全。


最好添加一个类型serial为自动增加 ( bigint) 数字的列。

Postgres 10开始,您可以使用 theGENERATE IDENTITY而不是serial类型:

id INT GENERATED ALWAYS AS IDENTITY

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

于 2018-09-27T09:23:02.610 回答
2

我认为仅使用 created_time 是不明智的,因为可能同时放置 2 个不同的订单

我更喜欢组合order_number,created_time列来制作独特

于 2018-09-27T09:23:19.880 回答