我试图通过在我的服务器上运行的PostgreSQL建立远程连接,基于Ubuntu 16.04。到目前为止,当我点击pgAdmin上的Save按钮时,它会冻结,什么都不做。键入... / manage.py runserver My_droplet_IP:5432后,我尝试了网页,并且可以访问。
我在创建Droplet后遵循了本教程。 https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04
然后我编辑了settings.py; pg_hba.conf的; postgresql.conf文件
settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresqlpsycopg2',
'NAME': '.....',
'USER': '....',
'PASSWORD': '....',
'HOST': '127.0.0.1',
'PORT': '5432',
STATICROOT = os.path.join(BASE_DIR, 'static/') - at the end of the page
当然,我的Droplet ip改变了允许的HOSTS = [' ....']。
postgresql.conf listen_address is set to '*'
pg_hba.conf文件:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
还允许防火墙,并允许5432例外。
有什么想法吗?
答案 0 :(得分:7)
首先测试是否可以通过psql连接到数据库:
psql -h ip_address -d name_of_the_database -U username
如果您收到连接拒绝错误,则必须设置错误并检查如果远程连接到PostgreSQL不能正常工作,我应该检查什么?
psql: could not connect to server: Connection refused Is the server running on host ip_address
检查pg_hba.conf
通常位于linux上 - /etc/postgresql/version/main/pg_hba.conf
。
您应该允许从所有IP地址对特定IP的客户端进行身份验证:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::0/0 md5
#all ips
host all all all md5
有关如何设置pg_hba.conf
的更多信息,请参阅documentation。
然后您应该设置侦听特定端口。
你必须找到postgresql.conf
。通常位于/etc/postgresql/9.1/main/postgresql.conf
)文件并使用listen_address更改行:
#listen_address = ''
to(不要忘记删除#,这意味着评论):
listen_address = '*'
每一步都应该重启Postgresql服务:
sudo service postgresql restart
在第2步之后,您应该在netstat命令后的侦听地址中看到端口5432(或5433):
netstat -ntlp
之后你必须在防火墙中为PostgreSQL打开端口:
sudo ufw allow 5432
您可以使用(您应该在列表中看到5432)检查防火墙设置:
sudo ufw status
如果上一步中的任何一个步骤不起作用,您应检查PostgreSQL是否未在不同的端口(通常是5433)上运行,并重复之前的步骤。
当您拥有更多运行版本的PostgreSQL或升级数据库并忘记停止以前版本的PostgreSQL时,会经常发生这种情况。
如果您在查找配置文件时遇到问题,可以查看此帖子Where are my postgres *.conf files?。
答案 1 :(得分:0)
如果您使用 GCP,请记住在 GCP 内设置防火墙规则以允许该端口,这可能会节省您几个小时的调试时间。