PostgreSQL 选择数据库
PostgreSQL 选择(连接 / 切换)数据库完全指南
涵盖 psql、pgAdmin、编程语言、脚本、常见错误 等全部场景。
一、什么是“选择数据库”?
在 PostgreSQL 中,一次连接只能操作一个数据库。
“选择数据库” = 切换当前会话连接的数据库。
二、方式 1:psql 命令行(最常用)
1. 连接时直接选择数据库
psql -U username -d database_name -h host -p port
示例:
# 连接本地 myapp 数据库,用户 appuser
psql -U appuser -d myapp
# 带主机和端口
psql -U appuser -d myapp -h 192.168.1.100 -p 5432
2. 进入 psql 后切换数据库
\c database_name [username] [host] [port]
示例:
-- 切换到 shop 数据库
\c shop
-- 切换到远程数据库并指定用户
\c analytics analytics_user 192.168.1.200 5432
在 psql 中,
\c是 最快切换方式!
3. 查看当前数据库
-- 方法 1:psql 元命令
\conninfo
-- 方法 2:SQL 查询
SELECT current_database();
三、方式 2:pgAdmin 图形化(新手友好)
- 打开 pgAdmin 4
 - 左边栏展开 
Servers→ 找到你的服务器 - 展开 
Databases - 双击 目标数据库(如 
myapp)→ 自动连接 - 右上角会显示:
Connected to: myapp 
也可以右键数据库 →
Query Tool打开 SQL 编辑器
四、方式 3:编程语言中选择数据库
Python (psycopg2)
import psycopg2
# 连接时指定数据库
conn = psycopg2.connect(
    dbname="myapp",        # 选择数据库
    user="appuser",
    password="password",
    host="localhost",
    port="5432"
)
cur = conn.cursor()
cur.execute("SELECT current_database();")
print(cur.fetchone())
不能中途切换数据库!需关闭连接,重新连接另一个。
Node.js (pg)
const { Client } = require('pg');
const client = new Client({
  user: 'appuser',
  host: 'localhost',
  database: 'myapp',     // 选择数据库
  password: 'password',
  port: 5432,
});
await client.connect();
const res = await client.query('SELECT current_database()');
console.log(res.rows[0]);
Java (JDBC)
String url = "jdbc:postgresql://localhost:5432/myapp";  // 选择数据库
Connection conn = DriverManager.getConnection(url, "appuser", "password");
五、方式 4:SQL 脚本中切换(不推荐)
-- 错误!SQL 本身不能切换数据库
-- SELECT * FROM myapp.users;  -- 跨库查询需 dblink
PostgreSQL 不支持跨数据库直接查询
解决方法:
- 使用
 dblink扩展(远程查询)- 使用
 postgres_fdw(外表)- 应用层切换连接
 
六、列出所有数据库(查看可选)
psql 命令
\l          -- 列出所有数据库
\l+         -- 包含大小、描述
SQL 查询
SELECT datname FROM pg_database WHERE datistemplate = false;
七、常见连接字符串(URL 格式)
| 工具 | 连接字符串格式 | 
|---|---|
| psql | postgresql://user:pass@host:port/dbname | 
| JDBC | jdbc:postgresql://host:port/dbname | 
| Python | postgresql://user:pass@host:port/dbname | 
| pgAdmin | 填 Host + Database + User | 
示例:
postgresql://appuser:secret123@localhost:5432/myapp
八、快速切换数据库技巧(psql)
| 命令 | 说明 | 
|---|---|
\c myapp | 切换到 myapp | 
\c myapp appuser | 切换数据库 + 用户 | 
\l | 列出所有数据库 | 
\conninfo | 查看当前连接信息 | 
Ctrl + D | 退出 psql | 
九、常见错误与解决
| 错误 | 原因 | 解决 | 
|---|---|---|
FATAL: database "mydb" does not exist | 数据库不存在 | \l 查看 → CREATE DATABASE mydb; | 
FATAL: role "user" does not exist | 用户不存在 | CREATE USER appuser WITH PASSWORD '...'; | 
FATAL: password authentication failed | 密码错误 | 重置:ALTER USER appuser WITH PASSWORD 'newpass'; | 
connection timed out | 主机/端口错误 | 检查 listen_addresses 和防火墙 | 
database "myapp" is being accessed by other users | 有连接占用 | SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='myapp'; | 
十、一键连接脚本(Linux/macOS)
# save as connect_db.sh
#!/bin/bash
DB=$1
USER=$2
psql -U ${USER:-postgres} -d $DB -h localhost
使用:
chmod +x connect_db.sh
./connect_db.sh myapp appuser
十一、跨数据库查询(高级)
使用 dblink(临时查询)
-- 启用扩展
CREATE EXTENSION dblink;
-- 从 current_db 查询 other_db
SELECT * FROM dblink('dbname=other_db', 'SELECT id, name FROM users')
AS t(id int, name text);
十二、总结:选择数据库 3 种核心方式
| 场景 | 推荐命令 | 
|---|---|
| 命令行快速连接 | psql -U user -d mydb | 
| psql 内切换 | \c mydb | 
| 编程语言 | 连接字符串中写 dbname=mydb | 
| 图形化 | pgAdmin 双击数据库 | 
小结:一图记住
连接时指定: psql -d mydb
进入后切换: \c mydb
查看当前:   \conninfo
列出所有:   \l
现在就动手:
- 用 
psql -U postgres进入 \l查看所有数据库\c myapp切换SELECT current_database();验证
需要我生成:
- 一键连接所有数据库的脚本?回复 
批量连接 - pgAdmin 批量连接多个数据库?回复 
pgAdmin 批量 - Docker 中连接数据库?回复 
Docker 
随时告诉我!