postgresql - 如何将文件中定义的模式与数据库上运行的实际模式进行比较?
问题描述
我正在运行一个 PostgreSQL 数据库,并希望将其中定义schema.sql
的架构与定期在数据库上创建的架构进行比较。即验证没有应用远程手动更改或schema.sql
实际反映数据库上运行的内容。
我目前在做的大致是:
schema.sql
通过使用创建转储pg_virtualenv
:
$ pg_virtualenv sh -c 'psql -U $PGDATABASE -f schema.sql
$ pg_dump --schema-only --no-comments --no-owner --no-privileges --schema=public -U $PGDATABASE -f schema_local.sql'
- 从远程创建转储
$ pg_dump --schema-only --no-comments --no-owner --no-privileges --schema=public -U $PGREMOTE -f schema_upstream.sql
- 去掉注释、、
SET
空行等和diff
它们
$ diff -u <(grep -Ev '^--|^SET|^$$' schema_local.sql) <(grep -Ev '^--|^SET|^$$' schema_upstream.sql)
这工作得相当好,如果它们发生,我可以很容易地发现差异中的模式更改。但解决方案似乎有点老套,我想知道是否有更好的方法来实现同样的目标?
解决方案
推荐阅读
- java - 如何使用selenium在excel文件中查找字符串的位置
- react-native - 错误:无法使用 react-native-video 解析“react-native/Libraries/Image/resolveAssetSource”
- javascript - 如何在 PHP 中使 mysql 查询不断刷新?
- python - 我的脚本不会进入下一页进行抓取
- c - Coq VST 内部结构复制
- java - 如何获得具有相同模式的所有字符串
- arrays - Powershell Set-Acl - 错误新对象:找不到“FileSystemAccessRule”的重载和参数计数:“1”
- django - Django get_or_create ValueError
- javascript - 使用 jquery 动态生成的 URL 部分重复
- linux - ip_nonlocal_bind=1 如何破坏应用程序?