来自https://wiki.postgresql.org/wiki/Psycopg2_Tutorial
PostgreSQL无法在事务中删除数据库,这是全部 或没有命令。如果要删除数据库,则需要 更改数据库的隔离级别,这可以使用 正在关注。
conn.set_isolation_level(0)
您应将以上内容放在DROP DATABASE的紧前面 光标执行。
为什么“如果要删除数据库,则需要更改数据库的隔离级别”?
特别是为什么我们需要将隔离级别更改为0? (如果我是正确的,则0表示psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED
)
来自https://stackoverflow.com/a/51859484/156458
销毁数据库的操作是通过以下方式实现的: 阻止撤消操作-因此您不能从内部运行它 交易,因为交易总是不可撤销的。 请注意,与大多数其他数据库不同,PostgreSQL允许几乎所有DDL 内部执行的语句(显然不是DROP DATABASE语句) 交易。
实际上,如果有人(包括您) 当前已连接到此数据库-因此,不管是什么 您的隔离级别,您仍然必须连接到另一个数据库 (例如postgres)
“您不能从事务内部运行它,因为事务总是不可撤消的”。那我怎么不从事务内部删除数据库呢?
答案 0 :(得分:1)
我不熟悉psycopg2,所以我只能提供要执行的步骤。
要从 Python 执行DROP DATABASE
的步骤:
DROP DATABASE
查询要从 PSQL 执行DROP DATABASE
的步骤:
DROP DATABASE
查询psql中的代码
\c second_db
DROP DATABASE first_db;
请记住,您要删除的数据库没有实时连接。