如何在Python(psycopg2)中获得等效于pg_dump -s <dbname>的信息?

Bal*_*gor 5 python postgresql psycopg2

我的任务是将Postgres中我们的应用程序群集中的几个数据库的架构与我们应用程序不同版本的相同数据库进行比较。

比较应该只检查架构而不是数据。

对我来说,最基本的方法是使用子过程来执行

    pg_dump -U <user> -s <database> > schema.txt
Run Code Online (Sandbox Code Playgroud)

对于每个数据库,然后运行差异。

两个问题

1)这是查看架构是否已更改的正确方法吗?2)是否可以通过psycopg2而不使用subproc或pg_dump或psql?

谢谢!

kha*_*son 3

这取决于架构是否已更改意味着什么。如果这字面意思是如果有的话差异,无论多么重要,那么是的,您需要转储模式然后比较它们。

对于此任务,您肯定会希望使用pg_dump--schema-only选项。没有执行此操作的SQL语句,因此无法直接通过psycopg2执行此操作。(有较低级别的Postgres库函数可用,允许像PgAdmin3这样的程序显示表等的所有DDL,但我相信需要直接通过libpq调用)。

但是,如果您想找出其他类型的差异,则可以通过psycopg2通过查询各种系统目录表来完成(如果不是更复杂的话)。

例如,您可以查询pg_tables以确定存在哪些表,并比较这些表以查看是否缺少任何表。然后,您可以直接查询这些表以获取更多信息,例如检查计数是否相同等。