Вставить неправильный порядок в postgresql (используя pro c)

Я хотел вставить данные в psql из текстового файла с помощью pro c, после вставки данных в моей программе pro c порядок данных в psql иногда отличался от текстового файла.

не было никакой ошибки sql в процессе, я нашел проблему, когда я выбираю * из таблицы.

Был ли какой-то метод, чтобы подтвердить порядок, который я вставил так же, как порядок в базе данных (PSQL)?

Спасибо!

например:

стол: тестируемый
id int
имя персонажа (20)

текстовый файл:
100 ами
200 джон
300 радости
400 рубинов

но данные в 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;
}

3 ответа

Решение

Проверьте документацию:"Если сортировка не выбрана, строки будут возвращены в неуказанном порядке. Фактический порядок в этом случае будет зависеть от типов плана сканирования и объединения и порядка на диске, но на него нельзя полагаться.

Поэтому типичным решением является добавление уникального увеличенного целочисленного идентификатора и сортировка по нему в вашем SELECT заявление:

SELECT * 
  FROM table
 ORDER BY id;

В качестве альтернативы вы можете использовать столбец, как INSERT_DATE и заполните его отметкой времени.

ps: проверить тип данных SERIAL в главе 8.1.4 в документации по числовым типам

Данные, загруженные в реляционную базу данных, не имеют собственного порядка. Если вы хотите конкретный порядок выбранных данных, вы должны использовать "упорядочить по" в вашем выборе. Это не ошибка.

Когда вы извлекаете данные из реляционных баз данных без явного указания порядка, в котором вы хотите получить данные (используя order by пункт) вы получите набор в случайном порядке обратно. Если вы заботитесь о заказе, укажите его при получении данных. Не беспокойтесь о порядке хранения товаров в базе данных.

Заявление как select * from ... не имеет порядка, и вы не должны ожидать ни одного.

Другие вопросы по тегам