【问题标题】:psycopg2.errors.ObjectInUse: database is being accessed by other userspsycopg2.errors.ObjectInUse:其他用户正在访问数据库
【发布时间】:2022-06-16 22:33:48
【问题描述】:

我是数据库操作的新手,我正在编写一个 python 脚本来备份和恢复 postgres 中数据库的备份

下面是我的python脚本

import subprocess
import psycopg2



user = "postgres"
password = "postgres"
host = "localhost"
port = "5432"
database_name = "test"
dest_file = "/home/admin/temp/db.sql"

#Taking db backup
process = subprocess.Popen(['pg_dump','--dbname=postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, database_name),'-Fc','-f', dest_file],stdout=subprocess.PIPE)
output = process.communicate()[0]
if process.returncode != 0:
    print('Command failed. Return code : {}'.format(process.returncode))
    exit(1)
print(str(process))


#Doing db changes




#Restoring db in a chance of error
conn = psycopg2.connect(user = user,password = password,host = host,port = port)
conn.autocommit = True
with conn.cursor() as cursor:
    cursor.execute('DROP DATABASE test;')
    cursor.execute('CREATE DATABASE test;')

process = subprocess.Popen(['pg_restore', '--no-owner','--dbname=postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, database_name), dest_file],stdout=subprocess.PIPE)

output = process.communicate()[0]
if process.returncode != 0:
    print('Command failed. Return code : {}'.format(process.returncode))
    exit(1)
print(output)

执行代码时出现以下错误..

psycopg2.errors.ObjectInUse: database "test"  is being accessed by other users

不知道怎么了。。 请帮忙

【问题讨论】:

  • 你需要关闭连接 - conn.close() 已经回答here

标签: python database postgresql


【解决方案1】:

您的test 数据库上有连接,在继续之前必须关闭这些连接,可以使用以下方法实现:

-- Stop further connections
alter database test allow_connections = off;

-- Drop remaining (except this connection)
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'test' 
  AND pid <> pg_backend_pid();

现在可以删除数据库 - 通过您的代码或 SQL 即

drop database test;

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2018-08-20
    • 1970-01-01
    • 2011-01-23
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多