Вставить неправильный порядок в 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 ...
не имеет порядка, и вы не должны ожидать ни одного.