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

insert wrong order in postgresql (using pro c)

我想用 proc 从文本文件中插入数据到 psql,在用我的 proc 程序插入数据后,p 中数据的顺序sql 有时与文本文件不同。

过程中没有任何sql错误,我在select * from table.

时发现了问题

有没有什么方法可以确认我插入的订单与数据库中的订单相同(psql)?

谢谢!

例如:

table: testtable
id int
name char(20)

txt file:
100 amy
200 john
300 joy
400 ruby

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

200 john
300 joy
400 ruby
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;
}

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

select * from ... 这样的语句没有顺序,您应该期待 none.

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

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

SELECT * 
  FROM table
 ORDER BY id;

或者,您可以使用像 INSERT_DATE 这样的列并用时间戳填充它。

p.s.: 检查第 8.1.4 章中的数据类型 SERIALNumeric Types 文档

加载到关系数据库中的数据没有固有顺序。如果您想要 selected 数据的特定顺序,您应该在 select 中使用 "order by"。这不是错误。