【发布时间】:2017-08-15 18:53:52
【问题描述】:
我有一个 Postgres 数据库,我在表中插入了一些数据。由于 Internet 连接问题,无法写入某些数据。我尝试写入数据库的文件很大(大约 330712484 行 - 即使是 ws -l 命令也需要一段时间才能完成。
现在,row_id 列是(整数)主键,并且已经被索引。由于某些行无法插入到表中,我想将这些特定行插入到表中。 (我估计只有大约 1.8% 的数据没有插入到表中……)一开始,我尝试查看数据库中的主键,如下所示:
conn = psycopg2.connect(connector)
cur = conn.cursor()
with open(fileName) as f:
header = f.readline().strip()
header = list(csv.reader([header]))[0]
print(header)
for i, l in enumerate(f):
if i>10: break
print(l.strip())
row_id = l.split(',')[0]
query = 'select * from raw_data.chartevents where row_id={}'.format(row_id)
cur.execute(query)
print(cur.fetchall())
cur.close()
conn.close()
即使是前几行数据,检查主键是否存在也需要大量时间。
最快的方法是什么?
【问题讨论】:
-
id 是连续的,没有间隔吗?
-
不幸的是,我不确定。数据是匿名的,
row_id是数据的一部分。我想说是的,但不幸的是,它们不按顺序...
标签: postgresql insert