我想用pro c从文本文件向psql插入数据,在使用我的pro c程序插入数据后,psql中的数据顺序有时与文本文件不同。
在这个过程中没有任何sql错误,我在从表中选择*时发现了问题。
是否有某些方法可以确认我插入的顺序与数据库中的顺序相同(psql)?
谢谢!
例如:
table:testtable
id int
name char(20)txt文件:
100 amy
200约翰
300喜悦
400红宝石
但psql中的数据如下:
200约翰
300喜悦
400红宝石
100 amy
我的节目:
EXEC SQL BEGIN DECLARE SECTION;
int id;
char name[20];
int id_ind, name_ind;
EXEC SQL ENDDECLARE SECTION;
main ()
{
EXEC CONNECT TO SQL ....
while ( still have data ){
read_data_from_file()
put_data_in_host_varable();
EXEC SQL INSERT INTO testtable( id, name )
VALUES (:id INDICATOR id_ind, :name INDICATOR name_ind)
}
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT ALL;
}
答案 0 :(得分:1)
检查documentation: “如果未选择排序,则行将以未指定的顺序返回。在这种情况下,实际的顺序将取决于扫描和连接计划类型以及磁盘上的顺序,但不能依赖它。
所以典型的解决方案是添加一个唯一的,递增的整数标识符,并在SELECT
语句中按它排序:
SELECT *
FROM table
ORDER BY id;
或者,您可以使用INSERT_DATE
之类的列,并使用时间戳填充它。
p.s。 :在Numeric Types文档
中的8.1.4章中检查数据类型SERIAL
答案 1 :(得分:1)
加载到关系数据库中的数据没有固有的顺序。如果您想要所选数据的特定订单,您应该在您的选择中使用“order by”。这不是错误。
答案 2 :(得分:0)
当你从关系数据库中检索数据而没有明确指定你想要数据的顺序时(使用order by
子句),你将得到一个随机顺序的集合。如果您关心订单,请在检索数据时指定它。不要担心数据库选择存储项目的顺序。
像select * from ...
这样的陈述没有订单,你应该没有订单。