Skip to content

PostgreSQL选择数据库

概述

在PostgreSQL中,需要先连接到特定数据库才能对其进行操作。本章介绍如何选择和切换数据库。

连接时选择数据库

使用psql连接

bash
# 连接到指定数据库
psql -d myapp -U postgres

# 完整连接参数
psql -h localhost -p 5432 -d myapp -U postgres

# 使用连接字符串
psql "postgresql://postgres@localhost/myapp"

连接字符串格式

postgresql://[user[:password]@][host][:port][/database][?param=value]

示例:

bash
psql "postgresql://postgres:password@localhost:5432/myapp"

切换数据库

使用\c命令

在psql中,使用\c\connect命令切换数据库:

sql
-- 切换到myapp数据库
\c myapp

-- 切换数据库并指定用户
\c myapp postgres

-- 切换数据库、用户和主机
\c myapp postgres localhost 5432

切换示例

postgres=# \c myapp
You are now connected to database "myapp" as user "postgres".
myapp=#

查看当前数据库

使用psql命令

sql
-- 显示当前数据库
SELECT current_database();

-- 显示连接信息
\conninfo

输出示例

myapp=# SELECT current_database();
 current_database
------------------
 myapp
(1 row)

myapp=# \conninfo
You are connected to database "myapp" as user "postgres" on host "localhost" at port "5432".

列出所有数据库

使用psql命令

sql
-- 列出所有数据库
\l

-- 列出详细信息
\l+

使用SQL查询

sql
-- 查询数据库列表
SELECT datname, pg_database_size(datname) as size
FROM pg_database
WHERE datistemplate = false;

-- 查看数据库详细信息
SELECT
    datname as "Database",
    pg_catalog.pg_get_userbyid(datdba) as "Owner",
    pg_catalog.pg_encoding_to_char(encoding) as "Encoding",
    datcollate as "Collation",
    datctype as "Ctype"
FROM pg_catalog.pg_database
ORDER BY datname;

在应用程序中选择数据库

Python (psycopg2)

python
import psycopg2

# 连接到指定数据库
conn = psycopg2.connect(
    host="localhost",
    database="myapp",
    user="postgres",
    password="password"
)

Node.js (pg)

javascript
const { Pool } = require('pg');

const pool = new Pool({
    host: 'localhost',
    database: 'myapp',
    user: 'postgres',
    password: 'password'
});

Java (JDBC)

java
String url = "jdbc:postgresql://localhost:5432/myapp";
Connection conn = DriverManager.getConnection(url, "postgres", "password");

注意事项

  1. 连接限制:每个数据库连接只能访问一个数据库
  2. 切换开销:频繁切换数据库会增加连接开销
  3. 权限检查:切换数据库需要对目标数据库有CONNECT权限
  4. 默认数据库:如果不指定数据库,通常连接到与用户同名的数据库

常见问题

数据库不存在

FATAL: database "myapp" does not exist

解决方法:先创建数据库或连接到其他存在的数据库。

权限不足

FATAL: permission denied for database "myapp"

解决方法:使用有权限的用户或授予CONNECT权限。