sql - pg_dump 插入按主键排序的 SQL 文件
问题描述
我正在使用以下命令从数据库中提取表:
pg_dump -U postgres --column-inserts --data-only --table=<mytable> <mydb> > <mytablev2>.sql
这会创建一个包含 INSERT 语句的 .sql 文件来重新创建我的表。我遇到的唯一问题是它没有按主键的顺序对数据进行排序。这是一个较新版本的表,我希望我的行按主键顺序排列,以便更轻松地跟踪版本之间的更改。是否有可能做到这一点?
解决方案
为了效率起见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
输出进行排序的问题)。
推荐阅读
- windows-10 - Autohotkey:当程序失去焦点时自动最小化程序
- python - Pandas Dataframe 删除新的换行符
- oozie - Splunk 与 Oozie 的集成
- javascript - 当控件和声音正常工作时,如何修复反应原生视频播放器的可见性?
- javascript - 完成后如何调用另一个 setInterval 然后重置为番茄项目的默认时间
- javascript - 我的 Bootstrap Navbar toogler 按钮只是显示不起作用
- javascript - 将 Bootstrap 添加到动态创建的元素
- javascript - 显示更多和更少的 javascript 时出错
- excel - Excel:搜索列中是否存在特定关键字
- c - 尝试将字典加载到内存中时 C 中的分段错误(cs50 pset5,拼写器)