1

我想用 pro c 从文本文件向 psql插入数据,用 pro c 程序插入数据后,psql 中的数据顺序有时与文本文件不同。

过程中没有任何sql错误,当我从表中选择*时发现问题。

是否有某种方法可以确认我插入的顺序与数据库(psql)中的顺序相同?

谢谢!

例如:

表:testtable
id int
name char(20)

txt 文件:
100 艾米
200 约翰
300 欢乐
400 ruby

但是 psql 中的数据是这样的:

200 约翰
300 欢乐
400 红宝石
100 艾米

我的程序:

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;
}
4

3 回答 3

1

检查文档: “如果未选择排序,则将按未指定的顺序返回行。这种情况下的实际顺序将取决于扫描和连接计划类型以及磁盘上的顺序,但不能依赖它。

所以典型的解决方案是在你的SELECT语句中添加一个唯一的、递增的整数标识符并按它排序:

SELECT * 
  FROM table
 ORDER BY id;

或者,您可以使用类似的列INSERT_DATE并用时间戳填充它。

ps:检查数值类型文档SERIAL第 8.1.4 章中的

于 2015-04-08T09:59:39.510 回答
1

加载到关系数据库中的数据没有内在的顺序。如果您想要所选数据的特定顺序,您应该在您的选择中使用“order by”。这不是错误。

于 2015-04-08T10:00:40.330 回答
0

当您从关系数据库中检索数据而没有明确指定数据的顺序(使用order by子句)时,您将得到一个随机顺序的集合。如果您关心订单,请在检索数据时指定它。不要担心数据库选择存储项目的顺序。

像这样的声明select * from ...没有顺序,你应该期待没有。

于 2015-04-08T09:58:38.867 回答