Python Postgres按多列排序,然后创建新索引

Python Postgres按多列排序,然后创建新索引,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我正在使用psycopg2连接到postgres数据库 数据库有大约2亿行,我正在尝试创建一个主键,它按几列的顺序排列 part_id, date, time A001 2014-10-23 00:00:00 A001 2014-10-23 00:00:10 ... A002 2014-10-23 00:00:00 我可以做到以下几点: ALTER TABLE data ADD COLUMN ID SERIAL PRIMARY KEY; 但是我如何才能按part_id(虽然

我正在使用psycopg2连接到postgres数据库

数据库有大约2亿行,我正在尝试创建一个主键,它按几列的顺序排列

part_id, date, time
A001   2014-10-23  00:00:00
A001   2014-10-23  00:00:10
...
A002   2014-10-23  00:00:00
我可以做到以下几点:

ALTER TABLE data ADD COLUMN ID SERIAL PRIMARY KEY;

但是我如何才能按part_id(虽然是varchar,但如上所述是部分数字)排序,然后先日期,然后时间,并在排序表中创建id列?

您可以在树列上添加主键:

alter table data add primary key(part_id, date, time);
然而,许多有经验的SQL开发人员认为主键应该只用于标识行和其他任何内容。根据这种方法,您应该使用一个简单的
id
主键,并在必要时创建附加索引,例如

alter table data 
    add id serial primary key,
    add unique (part_id, date, time);
这似乎不太理想,因为它需要两个索引,而不是一个索引,但在实践中,它很舒适,避免了一些不必要的复杂情况

我强烈建议不要试图创建一个整数列来反映其他列的顺序