【问题标题】:pg_dump: error: could not translate host name "localhost" to address: Unknown server errorpg_dump:错误:无法将主机名“localhost”转换为地址:未知服务器错误
【发布时间】:2022-08-11 15:48:59
【问题描述】:

我有一个应该备份现有 PostgreSQL 的代码,但是当我运行代码时出现错误

pg_dump: error: could not translate hostname \"localhost\" to address: Unknown server error

我将 bin 和 lib 的文件夹路径保存在环境变量中,但仍然显示相同的错误,请任何人帮助我

下面是代码:

import subprocess
import os

os.chdir(\'C:/Program Files/PostgreSQL/14/bin\')

DB_NAME = \'postgress\'  # your db name

DB_USER = \'postgres\' # you db user
DB_HOST = \"localhost\"
DB_PASSWORD = \'ABC\'# your db password
dump_success = 0
print(\'Backing up %s database \' % (DB_NAME))

command_for_dumping = f\'pg_dump --host={DB_HOST} \' \\
            f\'--dbname={DB_NAME} \' \\
            f\'--username={DB_USER} \' \\
            f\'--no-password \' \\
            f\'--file=tmp/backup.dmp \'
try:
     proc = subprocess.Popen(command_for_dumping, shell=True, env={
                   \'PGPASSWORD\': DB_PASSWORD
                   })
     proc.wait()

except Exception as e:
        dump_success = 0
        print(\'Exception happened during dump %s\' %(e))


if dump_success:
    print(\'db dump successfull\')
print(\' restoring to a new database database\')


backup_file = \'tmp/backup.dmp\'
\"\"\"give absolute path of your dump file. This script will create the backup.dmp in the same directory from which u are running the script \"\"\"

if not dump_success:
    print(\'dump unsucessfull. retsore not possible\')
else:
    try:
        process = subprocess.Popen(
                        [\'pg_restore\',
                         \'--no-owner\',
                         \'--dbname=postgresql://{}:{}@{}:{}/{}\'.format(\'postgres\',#db user
                                                                       \'ABC\', #db password
                                                                       \'localhost\',  #db host
                                                                       \'5432\', \'ReplicaDB\'), #db port ,#db name
                         \'-v\',
                         backup_file],
                        stdout=subprocess.PIPE
                    )
        output = process.communicate()[0]
    except Exception as e:
           print(\'Exception during restore %e\' %(e) )

所以在输出中它显示一个错误:

pg_dump:错误:无法将主机名“localhost”转换为地址:未知服务器错误

我是这种语言的新手,所以我不确定我是否犯了错误。谁能指导我。

  • 如果这是在没有网络连接的 Windows 机器上,那么您的问题可能是 Windows 在离线时无法解析 \'localhost\' 的地址。为了解决这个问题,您可以在 hosts 或 lmhosts 文件中为 localhost 添加一个条目。或者您可以使用地址127.0.0.1 而不是localhost
  • 我使用了 127.0.0.1 但它仍然显示相同的错误

标签: python psql pgadmin database-backups pgadmin-4


【解决方案1】:

OP 可能有点晚了,但希望这可以帮助其他人。

这似乎只发生在 Windows 上。尝试将SYSTEMROOT 添加到环境中:

env={
    'PGPASSWORD': DB_PASSWORD,
    'SYSTEMROOT': os.environ['SYSTEMROOT']
}

这为我以类似的方式从 python 调用pg_dump 修复了它。 我首先尝试将 IP 地址直接用作主机,然后出现了不同的错误:

Socket: The requested service provider could not be loaded or initialized

搜索此错误导致我这篇文章: https://travis-ci.community/t/socket-the-requested-service-provider-could-not-be-loaded-or-initialized/1127

DLL 需要哪个建议的 SYSTEMROOT 环境变量才能正确加载有关打开套接字的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2012-08-23
    • 2021-10-16
    • 2020-01-01
    相关资源
    最近更新 更多