python - 如何在 Python (psycopg2) 中获得 pg_dump -s <dbname> 的等价物?

标签 python postgresql psycopg2

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

比较应该只检查模式而不是数据。

我最基本的方法是使用子进程来执行

    pg_dump -U <user> -s <database> > schema.txt

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

两个问题

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

谢谢!

最佳答案

这取决于架构是否已更改 的含义。如果字面上的意思是如果模式之间存在任何差异,无论多么重要,那么是的,您会想要转储模式然后比较它们。

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

但是,如果您想找出其他类型的差异,则可以通过 psycopg2 通过查询各种 system catalog 来完成(如果不是涉及更多的话)表格。

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

关于python - 如何在 Python (psycopg2) 中获得 pg_dump -s <dbname> 的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020887/

相关文章:

python - 如何基于包含值作为列表的列连接数据框

postgresql - 使用 jOOQ 获取表列表

python - 使用 psycopg2 缓存中间表

python - 将 PostgreSQL 行转换为文本,但将列分开

python - 在运行线程中显示 chaco 图

python - 异步递增并返回 Django 1.3 对象的字段并确保唯一性

python - 在 Python 中使用循环创建交替字典

sql - 删除 "column does not exist"

database - pg_restore 错误 : role XXX does not exist

python - 如何读取 psycopg2 的只读状态?