我的任务是将Postgres应用程序集群中几个数据库的模式与我们应用程序的不同版本的相同数据库进行比较。
比较应该只检查架构而不是数据。
最基本的方法是使用subproccess来执行
pg_dump -U <user> -s <database> > schema.txt
为每个数据库,然后运行差异。
两个问题
1)这是查看架构是否已更改的正确方法吗? 2)这是否可以通过psycopg2,而不使用subproccess或pg_dump或psql?
谢谢!
答案 0 :(得分:3)
这取决于如果架构已更改的含义。如果字面上意味着模式之间存在任何差异,无论多么重要,那么是的,您可能希望转储模式然后进行比较。
对于此任务,您肯定希望将pg_dump
与--schema-only
选项一起使用。没有 SQL 语句可以执行此操作,因此无法直接通过 psycopg2 执行此操作。 (有一些较低级别的 Postgres 库函数可以让 PgAdmin3 这样的程序显示表等的所有 DDL ,但我相信需要通过 libpq 直接调用。
但是,如果您想要找到的是其他类型的差异,则可以通过查询各种{{3}来通过 psycopg2 来实现(如果不是更多一些)。 } tables。
例如,您可以查询system catalog以确定存在哪些表,并比较这些表以查看是否缺少任何表。然后,您可以直接查询这些表以获取更多信息,例如,检查计数是否相同等等。