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 图形化(新手友好)

  1. 打开 pgAdmin 4
  2. 左边栏展开 Servers → 找到你的服务器
  3. 展开 Databases
  4. 双击 目标数据库(如 myapp)→ 自动连接
  5. 右上角会显示: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 格式)

工具连接字符串格式
psqlpostgresql://user:pass@host:port/dbname
JDBCjdbc:postgresql://host:port/dbname
Pythonpostgresql://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

现在就动手

  1. psql -U postgres 进入
  2. \l 查看所有数据库
  3. \c myapp 切换
  4. SELECT current_database(); 验证

需要我生成:

  • 一键连接所有数据库的脚本?回复 批量连接
  • pgAdmin 批量连接多个数据库?回复 pgAdmin 批量
  • Docker 中连接数据库?回复 Docker

随时告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注