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");注意事项
- 连接限制:每个数据库连接只能访问一个数据库
- 切换开销:频繁切换数据库会增加连接开销
- 权限检查:切换数据库需要对目标数据库有CONNECT权限
- 默认数据库:如果不指定数据库,通常连接到与用户同名的数据库
常见问题
数据库不存在
FATAL: database "myapp" does not exist解决方法:先创建数据库或连接到其他存在的数据库。
权限不足
FATAL: permission denied for database "myapp"解决方法:使用有权限的用户或授予CONNECT权限。