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
随时告诉我!