django - 与 pgAdmin 的远程 PostgreSQL 连接
问题描述
我正在尝试通过在我的服务器上运行的 PostgreSQL 建立远程连接,基于 Ubuntu 16.04。到目前为止,当我单击 pgAdmin 上的保存按钮时,它有点冻结,什么也不做。输入 .../manage.py runserver My_droplet_IP:5432 后,我尝试了网页,它可以访问。
创建液滴后,我遵循了本教程。 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 更改了 ALLOWED 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 例外。
有任何想法吗?
解决方案
首先测试是否可以通过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
如果远程连接到 PostgreSQL 不起作用,我应该检查什么?
检查身份验证配置
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
您可以在文档中找到。然后你应该设置监听特定端口。
你必须找到
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 时,这种情况经常发生。
如果您在查找配置文件时遇到问题,可以查看此线程我的 postgres *.conf 文件在哪里?.
推荐阅读
- sql - 每次修改表时运行脚本
- node.js - 如何在 React 中使用使用“window”引用的组件与服务器端渲染?
- c# - 使用 Func 和 Expression Func 运行查询之间的差异
- javascript - 如何使用 HTML、CSS、Javascript 在可编辑字段中垂直键入文本...?
- jenkins - 詹金斯的 currentBuild()
- python - PIL 绘制没有灰色轮廓的文本
- intellij-idea - 默认在带有单词边界的路径中查找
- php - 在 Netbeans 8.2 中调试期间为空调用堆栈
- javascript - javascript forEach() 函数如何在 mongodb shell 中迭代文档?
- python - 为什么代码会为我的两个变量提供 NameError?