ZBLOG

psql如何连接远程数据库

以下是使用 psql 连接远程 PostgreSQL 数据库的详细方法:

🔌 基本连接语法

psql -h <主机名或IP> -p <端口> -U <用户名> -d <数据库名>

参数说明:

  • -h: 远程服务器的主机名或 IP 地址
  • -p: PostgreSQL 服务端口(默认 5432)
  • -U: 数据库用户名
  • -d: 要连接的数据库名

📝 具体连接示例

示例1:基本远程连接

# 连接到 IP 为 192.168.1.100 的远程服务器
psql -h 192.168.1.100 -p 5432 -U myuser -d mydatabase

# 或者使用域名
psql -h db.example.com -p 5432 -U myuser -d mydatabase

示例2:带密码提示的连接

# 系统会提示输入密码
psql -h remote-server.com -U username -d dbname

# 或者使用环境变量(避免在命令行暴露密码)
export PGPASSWORD="your_password"
psql -h remote-server.com -U username -d dbname

示例3:一行命令包含密码(不推荐用于生产)

PGPASSWORD="your_password" psql -h hostname -U username -d dbname

⚙️ 配置文件方式(推荐)

创建 ~/.pgpass 文件(避免每次输入密码)

# 格式:hostname:port:database:username:password
echo "remote-server.com:5432:mydatabase:myuser:mypassword" >> ~/.pgpass
chmod 600 ~/.pgpass  # 重要:设置权限确保安全

使用连接字符串

# URI格式
psql postgresql://username:password@hostname:port/database

# 示例:
psql postgresql://myuser:mypassword@192.168.1.100:5432/mydatabase

🔧 服务端配置要求

要让远程连接正常工作,服务端必须正确配置

1. 修改 postgresql.conf

sudo nano /etc/postgresql/*/main/postgresql.conf

# 找到并修改:
listen_addresses = '*'          # 允许所有IP连接
port = 5432                     # PostgreSQL端口

2. 修改 pg_hba.conf

sudo nano /etc/postgresql/*/main/pg_hba.conf

# 添加允许远程连接的规则:
# IPv4连接:
host    all             all             0.0.0.0/0               md5

# IPv6连接:
host    all             all             ::/0                    md5

3.重启PostgreSQL服务

sudo systemctl restart postgresql

# Ubuntu/Debian:
sudo systemctl restart postgresql

# CentOS/RHEL:
sudo systemctl restart postgresql-13   # version可能不同

🛠️ 防火墙配置

确保防火墙允许 PostgreSQL端口:

# Ubuntu UFW防火墙:
sudo ufw allow from any to any port 5432

# CentOS Firewalld:
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

# iptables:
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

🎯 实用技巧

测试网络连通性

telnet remote-server.com 5432   # Windows/Mac/Linux通用方法

# Linux替代方案:  
nc -zv remote-server.com  5432     # netcat工具  
timeout  3 bash   <<< 'cat < /dev/null > /dev/tcp/remote-server.com/5432' && echo "Port open" || echo "Port closed"

查看当前连接信息

--在成功连接到数据库后执行以下SQL查询来验证当前会话详情。 
SELECT inet_client_addr() as client_ip, inet_server_addr() as server_ip, current_database(), current_user;  
--该查询将显示客户端IP、服务器IP、当前数据库和当前用户。

请告诉我您遇到的具体问题,我可以提供更针对性的解决方案!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8530

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?