【发布时间】:2015-07-31 23:12:03
【问题描述】:
我的 postgres 数据库中有表 tmp,其中包含大约 1.39 亿条记录。我正在尝试将列col1、col2 和col3 移动到另一个名为r4a 的表的col1、col2 和col3。我用这个查询创建了表r4a:
CREATE TABLE r4a(
gid serial NOT NULL,
col1 double precision,
col2 double precision,
col3 double precision,
the_geom geometry,
CONSTRAINT r4a_pkey PRIMARY KEY (gid));
我在查询中创建了这个插入以填充 r4a 中的字段:
INSERT INTO r4a (col1,col2,col3)
SELECT col1, col2, col3
FROM tmp
limit 500;
它使用范围为 [14816024-14816523] 的数字填充 gid [PK] serial 列。
它如何确定也限制查询的 500 条记录?
是选择导入行[14816024-14816523]还是只是随意分配数字?
理想情况下,我希望主键从 1 开始并向上计数。作为 postgres 的新手并且拥有如此大的(在我看来)表,我想确保我了解发生了什么。
【问题讨论】:
-
在大多数数据库中,使用
limit或top或类似的东西而不指定任何order by子句将返回一组随机的行。可能是受影响的行按某种顺序(通常按插入顺序),但不能保证。如果您想要一组特定的行,则必须指定它。由于我不熟悉 Postgresql 的具体细节,因此我不会将其发布为答案,但我敢打赌它也适用于 PG。 -
我如何查询我将查询更改为仅移动前 500 行?
-
我不知道 Postgresqls 串行类型的机制,所以恐怕帮不了你。
标签: sql postgresql primary-key sql-insert