Ради эффективности pg_dump
просто выводит данные в зависимости от того, как они хранятся на диске. Это действительно затрудняет, если вы хотите отсортировать файлы дампа или отследить изменения с помощью чего-то вроде diff
. Я думаю, что единственный способ добиться этого - создать другую таблицу с отсортированными значениями:
postgres=# create table teller2 as SELECT * FROM pgbench_tellers order by tid;
SELECT 10
postgres=# \q
-bash-4.2$ pg_dump -U postgres --column-inserts --data-only --table=teller2
<...snip...>
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (1, 1, -58378, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (2, 1, 160826, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (3, 1, 21714, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (4, 1, -74568, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (5, 1, 21023, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (6, 1, -80872, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (7, 1, -26181, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (8, 1, -78087, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (9, 1, 43505, NULL);
INSERT INTO public.teller2 (tid, bid, tbalance, filler) VALUES (10, 1, -225725, NULL);
Я знаю, что это может плохо масштабироваться, когда вы имеете дело с миллионами строк. Единственные другие варианты, которые я могу придумать, требуют немного больше кодирования и низкого уровня знаний о том, как работает Postgres - в основном, я бы предложил использовать pg_waldump
или логическое декодирование, чтобы создать какой-то инструмент для отслеживания ваших изменений (но это не не удовлетворяет ваш первоначальный вопрос о том, как сортировать pg_dump
вывод).