与pgAdmin的远程PostgreSQL连接

Rve*_*Rve 3 database django postgresql ubuntu

我正在尝试通过基于Ubuntu 16.04在我的服务器上运行的PostgreSQL建立远程连接.到目前为止,当我点击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
Run Code Online (Sandbox Code Playgroud)

而且,当然用我的液滴ip改变了允许的HOSTS = ['....'].

postgresql.conf listen_address is set to '*'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

还允许防火墙,并允许5432例外.

有任何想法吗?

Bul*_*lva 10

首先测试是否可以通过psql连接到数据库:

psql -h ip_address -d name_of_the_database -U username
Run Code Online (Sandbox Code Playgroud)

如果你得到连接拒绝错误你必须设置错误并检查我应该检查如果远程连接到PostgreSQL不工作?

psql: could not connect to server: Connection refused Is the server running on host ip_address
Run Code Online (Sandbox Code Playgroud)

如果远程连接到PostgreSQL无法正常工作,我应该检查什么?

  1. 检查身份验证配置 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
    
    Run Code Online (Sandbox Code Playgroud)

    更多信息如何设置pg_hba.conf你可以找到文档.

  2. 然后你应该设置侦听特定端口.

    你必须找到postgresql.conf.通常位于/etc/postgresql/9.1/main/postgresql.conf)文件并使用listen_address更改行:

    #listen_address = ''
    
    Run Code Online (Sandbox Code Playgroud)

    (不要忘记删除#,这意味着评论):

    listen_address = '*'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 每一步之后你都应该重启Postgresql服务:

    sudo service postgresql restart
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在第2步之后,您应该在netstat命令后的侦听地址中看到端口5432(或5433):

    netstat -ntlp
    
    Run Code Online (Sandbox Code Playgroud)
  5. 之后你必须在防火墙中为PostgreSQL打开端口:

    sudo ufw allow 5432
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用(您应该在列表中看到5432)检查防火墙设置:

    sudo ufw status
    
    Run Code Online (Sandbox Code Playgroud)
  6. 如果上一步中的任何一个步骤不起作用,您应该检查PostgreSQL是否没有在不同的端口上运行(通常是5433)并重复前面的步骤.

    当你有更多运行版本的PostgreSQL或升级数据库并忘记停止以前版本的PostgreSQL时,这种情况经常发生.

如果您在查找配置文件时遇到问题,可以查看此主题我的postgres*.conf文件在哪里?.