在postgresql中插入错误的顺序(使用pro c)

时间:2015-04-08 09:51:33

标签: sql c postgresql embedded-sql

我想用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;
}

3 个答案:

答案 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 ...这样的陈述没有订单,你应该没有订单。