postgres 数据库信息解读 与 sqlshell常用指令介绍
数据库信息:
sqlshell
Server [localhost]: 192.168.30.101
Database [postgres]:
Port [5432]: 5432
Username [postgres]:
用户 postgres 的口令:
psql (15.12, 服务器 16.8 (Debian 16.8-1.pgdg120+1))
警告:psql 主版本15,服务器主版本为16.一些psql功能可能无法正常使用.
输入 "help" 来获取帮助信息.postgres=# \l数据库列表名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | ICU Locale | Locale Provider | 存取权限
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc |template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgres
(3 行记录) 解释以上代码
以下是对您提供的 PostgreSQL 命令行交互及输出的详细解释:
1. 连接数据库的过程
bash
Server [localhost]: 192.168.30.101 # 指定数据库服务器 IP 地址
Database [postgres]: # 使用默认数据库名 postgres(直接回车)
Port [5432]: 5432 # 使用默认端口 5432(直接回车)
Username [postgres]: # 使用默认用户名 postgres(直接回车)
用户 postgres 的口令: # 输入 postgres 用户的密码(输入时不显示)
- 通过
psql
命令连接到 PostgreSQL 服务器,手动指定了服务器 IP(192.168.30.101
),其他参数(数据库名、端口、用户名)使用默认值。 - 输入密码后成功连接,进入
psql
交互界面。
2. 版本兼容性警告
bash
psql (15.12, 服务器 16.8 (Debian 16.8-1.pgdg120+1))
警告:psql 主版本15,服务器主版本为16.一些psql功能可能无法正常使用.
- 客户端(psql)版本:15.12(本地工具版本)。
- 服务器版本:16.8(Debian 系统上的 PostgreSQL 服务器版本)。
- 警告原因:客户端和服务器主版本不一致(15 vs 16),可能导致部分新功能(如服务器新增的语法或特性)在客户端中无法使用,但基础功能通常不受影响。
3. \l 命令输出(数据库列表)
sql
postgres=# \l数据库列表名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | ICU Locale | Locale Provider | 存取权限
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc |template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres +| | | | | | | postgres=CTc/postgres
(3 行记录)
字段解释
-
名称(Name):
postgres
:默认的管理员数据库,用于管理操作(如创建其他数据库)。template0
和template1
:模板数据库,用于创建新数据库的模板(详见下文)。
-
拥有者(Owner):
- 所有数据库的拥有者都是
postgres
(默认管理员用户)。
- 所有数据库的拥有者都是
-
字元编码(Encoding):
UTF8
:数据库使用 UTF-8 字符编码,支持多语言文本存储。
-
校对规则(Collation) 和 Ctype:
en_US.utf8
:指定字符排序规则(Collation)和字符分类(Ctype),基于美国英语的 UTF-8 本地化设置(影响字符串比较、排序等操作)。
-
ICU Locale 和 Locale Provider:
- 此处未启用 ICU 本地化(ICU Locale 为空),使用传统的
libc
本地化提供程序。
- 此处未启用 ICU 本地化(ICU Locale 为空),使用传统的
-
存取权限(Access Privileges):
- 权限字符串格式:
用户=权限标识/角色
,+
表示多行权限。 =c/postgres
:c
:允许连接(Connect)数据库。- 无用户前缀时,表示对所有用户的默认权限(此处允许
postgres
用户连接)。
postgres=CTc/postgres
:C
:允许创建(Create)数据库(仅对模板数据库有效,因为创建新数据库会复制模板)。T
:允许创建临时表(Temporary tables)。c
:允许连接数据库。
- 权限字符串格式:
模板数据库的作用
-
template0
:- 只读模板数据库,用于创建完全干净的新数据库(不允许直接修改,防止模板被污染)。
- 新建数据库时若显式指定
-T template0
,会基于此模板创建。
-
template1
:- 可写模板数据库,默认创建新数据库时(未指定模板)会基于
template1
复制。 - 允许用户向其中添加自定义函数、扩展等,后续新建的数据库会继承这些设置。
- 可写模板数据库,默认创建新数据库时(未指定模板)会基于
总结
- 通过
psql
客户端连接到 PostgreSQL 服务器,客户端和服务器版本略有差异(不影响基本功能)。 - 当前服务器上有 3 个默认数据库,其中
template0
和template1
是核心模板数据库,用于快速创建新数据库。 - 权限配置显示只有
postgres
用户拥有管理这些数据库的完整权限(连接、创建、修改临时表等)。
sqlshell工具介绍:
SQL Shell(通常简称为 sqlsh
或直接通过数据库客户端连接,如 psql
for PostgreSQL、mysql
for MySQL 等)是用于与数据库交互的命令行工具。以下是常见的 SQL Shell 命令及操作说明,以通用语法和主流数据库(如 PostgreSQL、MySQL)为例进行介绍:
一、连接数据库
1. 登录数据库
语法:
# PostgreSQL
psql -U <用户名> -d <数据库名> -h <主机地址> -p <端口号># MySQL
mysql -u <用户名> -p<密码> -h <主机地址> -P <端口号> <数据库名>
示例:
# PostgreSQL 连接本地数据库
psql -U admin -d mydb# MySQL 连接时提示输入密码(-p 后不跟密码,回车后输入)
mysql -u root -p
2. 退出数据库
sql
-- 通用退出命令
\q # PostgreSQL
exit 或 quit # MySQL
二、执行 SQL 语句
1. 直接执行单行语句
在 Shell 提示符下直接输入 SQL 语句,以分号 ;
结尾并回车执行:
sql
-- 查看所有数据库(PostgreSQL)
\l-- 查看当前数据库所有表(MySQL)
SHOW TABLES;
2. 执行多行语句
按回车换行,输入完所有行后以分号 ;
结束,再回车执行:
sql
SELECT id, name
FROM users
WHERE age > 30;
3. 执行文件中的 SQL 脚本
语法:
bash
# PostgreSQL
psql -U <用户名> -d <数据库名> -f <脚本文件路径># MySQL
mysql -u <用户名> -p<密码> <数据库名> < <脚本文件路径>
示例:
psql -U admin -d mydb -f /path/to/script.sql
三、元数据查看命令(以 PostgreSQL 为例)
1. 查看数据库列表
sql
\l 或 \list
2. 查看当前数据库中的表
sql
\dt 或 \tables
3. 查看表结构
sql
\d <表名> # 例如:\d users
4. 查看用户列表
sql
\du 或 \users
5. 查看函数、视图等
sql
\df # 查看所有函数
\dv # 查看所有视图
四、事务与数据操作
1. 开启事务
sql
BEGIN; 或 START TRANSACTION;
2. 提交事务
sql
COMMIT;
3. 回滚事务
sql
ROLLBACK;
4. 插入数据
sql
INSERT INTO users (name, age) VALUES ('Alice', 30);
5. 查询数据
sql
SELECT * FROM users WHERE age > 25;
6. 更新数据
sql
UPDATE users SET age = 31 WHERE name = 'Alice';
7. 删除数据
sql
DELETE FROM users WHERE age < 18;
五、数据库管理命令(以 MySQL 为例)
1. 创建数据库
sql
CREATE DATABASE mydb;
2. 删除数据库
sql
DROP DATABASE mydb;
3. 切换数据库
sql
USE mydb;
六、高级操作
1. 执行带参数的查询(PostgreSQL)
sql
-- 使用 \set 定义变量
\set name 'Alice'
SELECT * FROM users WHERE name = :name;
2. 导出查询结果到文件
语法:
sql
-- PostgreSQL
\copy (SELECT * FROM users) TO '/path/to/output.csv' WITH CSV HEADER;-- MySQL
SELECT * INTO OUTFILE '/path/to/output.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM users;
3. 批量导入数据(从 CSV 文件)
语法:
sql
-- PostgreSQL
\copy users FROM '/path/to/input.csv' WITH CSV HEADER;-- MySQL
LOAD DATA INFILE '/path/to/input.csv' INTO TABLE users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
七、快捷键与实用技巧
操作 | PostgreSQL | MySQL | 说明 |
---|---|---|---|
自动补全 | Tab | Tab | 补全表名、列名等 |
查看历史命令 | history | \s | 显示命令历史 |
清屏 | \! clear | \c | 清除屏幕输出 |
查看帮助 | \h <命令> | HELP <语句> | 查看 SQL 语句语法帮助 |
八、注意事项
- 区分数据库客户端:不同数据库的 Shell 命令略有差异(如 PostgreSQL 的
\d
与 MySQL 的DESCRIBE
)。 - 权限问题:执行敏感操作(如删除数据库)需具备相应权限。
- 安全性:避免在命令行中明文输入密码,使用
-p
提示输入或通过环境变量配置。
通过以上命令,可以在 SQL Shell 中高效地管理数据库、执行查询和维护数据。具体操作可根据数据库类型(如 PostgreSQL、MySQL、Oracle 等)查阅官方文档获取更多细节。