PGSQL常见命令行与函数实例完整指南

作者:袖梨 2026-09-07

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“PGSQL常见命令行与函数实例”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • PostgreSQL 常用命令行与内置函数详解
    • 一、PostgreSQL 命令行工具(psql)详解
      • 1. 数据库连接与基本操作
      • 2. psql 内部元命令(反斜杠命令)
      • 3. 实用元命令大全
    • 二、PostgreSQL 内置函数详解
      • 1. 数学函数
      • 2. 字符串函数
      • 3. 日期时间函数
      • 4. 条件函数
      • 5. 聚合函数
      • 6. 窗口函数
      • 7. JSON 函数(PostgreSQL 9.3+)
    • 三、实用SQL示例
      • 1. 数据备份和恢复
      • 2. 性能分析
      • 3. 实用管理查询
    • 四、总结
    • 相关文献

PostgreSQL 常用命令行与内置函数详解

一、PostgreSQL 命令行工具(psql)详解

1. 数据库连接与基本操作

(1)连接数据库
# 基本连接(使用当前系统用户)
psql
# 连接指定数据库
psql -d mydatabase
# 连接指定用户和数据库
psql -U username -d mydatabase
# 连接远程数据库
psql -h hostname -p 5432 -U username -d mydatabase
# 连接并执行SQL文件
psql -d mydatabase -f script.sql
# 连接并执行单条命令
psql -d mydatabase -c "SELECT version();"
(2)连接参数说明
参数说明示例
-d数据库名-d postgres
-U用户名-U postgres
-h主机地址-h localhost
-p端口号-p 5432
-W强制密码提示-W
-f执行SQL文件-f init.sql
-c执行命令-c "SELECT 1"

2. psql 内部元命令(反斜杠命令)

(1)数据库操作
-- 列出所有数据库
l
l+
-- 连接/切换数据库
c database_name
connect database_name
-- 创建数据库
CREATE DATABASE newdb;
-- 删除数据库
DROP DATABASE olddb;
(2)表操作
-- 列出当前数据库所有表
dt
dt+
-- 描述表结构
d table_name
d+ table_name
-- 列出所有索引
di
di+
-- 列出所有序列
ds
ds+
(3)模式操作
-- 列出所有模式
dn
dn+
-- 设置搜索路径
SET search_path TO schema1, schema2;
-- 查看当前搜索路径
SHOW search_path;
(4)用户和权限
-- 列出所有用户/角色
du
du+
-- 查看当前用户
SELECT current_user;
-- 查看用户权限
dp table_name
z table_name
(5)信息查询
-- 查看服务器版本
SELECT version();
-- 查看连接信息
conninfo
-- 查看当前数据库
SELECT current_database();
-- 查看当前模式
SELECT current_schema();
(6)输出和格式控制
-- 扩展显示(行转列)
x on
x auto
x off
-- 设置输出格式
a (对齐切换)
f (字段分隔符)
-- 计时开关
timing on
timing off
-- 输出到文件
o filename.txt
o

3. 实用元命令大全

命令功能示例
?查看所有元命令帮助?
hSQL命令帮助h CREATE TABLE
q退出psqlq
!执行系统命令! ls -l
g再次执行上次查询g
s查看命令历史s
e采用编辑器编辑查询e
i执行外部SQL文件i /path/to/file.sql
copy导入导出数据copy table TO 'file.csv' CSV

二、PostgreSQL 内置函数详解

1. 数学函数

(1)基本数学运算
-- 绝对值
SELECT abs(-15); -- 15
-- 四舍五入
SELECT round(3.14159, 2); -- 3.14
SELECT round(123.456); -- 123
-- 取整函数
SELECT ceil(3.14); -- 4 (向上取整)
SELECT floor(3.14); -- 3 (向下取整)
SELECT trunc(3.14159, 2); -- 3.14 (截断)
-- 幂运算
SELECT power(2, 3); -- 8
SELECT sqrt(25); -- 5 (平方根)
SELECT cbrt(27); -- 3 (立方根)
-- 对数函数
SELECT ln(10); -- 自然对数
SELECT log(100); -- 以10为底对数
(2)三角函数
SELECT pi(); -- 3.14159265358979
SELECT sin(pi()/2); -- 1
SELECT cos(0); -- 1
SELECT tan(pi()/4); -- 1
SELECT degrees(pi()); -- 180 (弧度转角度)
SELECT radians(180); -- 3.14159 (角度转弧度)
(3)随机数生成
SELECT random(); -- 0-1之间的随机数
SELECT setseed(0.5); -- 设置随机种子
-- 生成指定范围随机整数
SELECT floor(random() * 100)::int; -- 0-99随机整数
SELECT (random() * (max-min) + min)::int; -- min-max随机整数

2. 字符串函数

(1)字符串操作
-- 长度和位置
SELECT length('Hello'); -- 5
SELECT position('l' in 'Hello'); -- 3
SELECT strpos('Hello', 'l'); -- 3
-- 大小写转换
SELECT upper('hello'); -- HELLO
SELECT lower('HELLO'); -- hello
SELECT initcap('hello world'); -- Hello World
-- 修剪函数
SELECT trim(' hello '); -- 'hello'
SELECT ltrim(' hello'); -- 'hello'
SELECT rtrim('hello '); -- 'hello'
SELECT trim(BOTH 'x' FROM 'xxhelloxx'); -- 'hello'
-- 填充函数
SELECT lpad('hi', 5, '*'); -- '***hi'
SELECT rpad('hi', 5, '*'); -- 'hi***'
(2)子字符串操作
-- 子字符串
SELECT substring('Hello World' from 2 for 5); -- 'ello '
SELECT substr('Hello World', 2, 5); -- 'ello '
-- 字符串替换
SELECT replace('Hello World', 'World', 'PostgreSQL'); -- 'Hello PostgreSQL'
SELECT translate('12345', '123', 'abc'); -- 'abc45'
-- 字符串分割
SELECT split_part('a,b,c,d', ',', 2); -- 'b'
SELECT string_to_array('a,b,c', ','); -- {a,b,c}
SELECT array_to_string(ARRAY['a','b','c'], ','); -- 'a,b,c'
(3)格式化函数
-- 字符串连接
SELECT concat('Hello', ' ', 'World'); -- 'Hello World'
SELECT 'Hello' || ' ' || 'World'; -- 'Hello World'
-- 格式化输出
SELECT format('Hello %s, your balance is %s', 'John', 100.50);
-- 'Hello John, your balance is 100.50'
-- 重复字符串
SELECT repeat('*', 5); -- '*****'

3. 日期时间函数

(1)当前时间拿到
-- 获取当前时间
SELECT current_date; -- 当前日期
SELECT current_time; -- 当前时间
SELECT current_timestamp; -- 当前时间戳
SELECT now(); -- 当前时间戳(同current_timestamp)
SELECT localtimestamp; -- 本地时间戳
-- 带精度的当前时间
SELECT current_time(2); -- 当前时间(2位小数秒)
SELECT current_timestamp(3); -- 当前时间戳(3位小数秒)
(2)日期时间提取
-- EXTRACT函数
SELECT extract(year FROM current_timestamp); -- 年份
SELECT extract(month FROM current_timestamp); -- 月份
SELECT extract(day FROM current_timestamp); -- 日期
SELECT extract(hour FROM current_timestamp); -- 小时
SELECT extract(minute FROM current_timestamp); -- 分钟
SELECT extract(second FROM current_timestamp); -- 秒数
SELECT extract(dow FROM current_timestamp); -- 星期几(0-6,周日=0)
SELECT extract(doy FROM current_timestamp); -- 一年中的第几天
-- DATE_PART函数(同EXTRACT)
SELECT date_part('year', current_timestamp);
(3)日期时间运算
-- 日期加减
SELECT current_date + INTERVAL '1 day'; -- 明天
SELECT current_date - INTERVAL '1 week'; -- 一周前
SELECT current_timestamp + INTERVAL '2 hours 30 minutes'; -- 2小时30分钟后
-- 年龄计算
SELECT age('2000-01-01'::date); -- 从2000-01-01到现在的年龄
SELECT age('2000-01-01'::date, '2020-01-01'::date); -- 两个日期之间的年龄
-- 日期截断
SELECT date_trunc('hour', current_timestamp); -- 截断到小时
SELECT date_trunc('day', current_timestamp); -- 截断到天
SELECT date_trunc('month', current_timestamp); -- 截断到月
(4)日期时间格式化
-- TO_CHAR格式化
SELECT to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS'); -- '2023-01-01 14:30:00'
SELECT to_char(current_timestamp, 'Day, Month DD, YYYY'); -- 'Sunday, January 01, 2023'
SELECT to_char(123.45, '999D99'); -- '123.45'
-- TO_DATE和TO_TIMESTAMP转换
SELECT to_date('20230101', 'YYYYMMDD'); -- 2023-01-01
SELECT to_timestamp('20230101 143000', 'YYYYMMDD HH24MISS'); -- 2023-01-01 14:30:00

4. 条件函数

(1)条件判断
-- CASE表达式
SELECT
    name,
    salary,
    CASE
        WHEN salary > 100000 THEN 'High'
        WHEN salary > 50000 THEN 'Medium'
        ELSE 'Low'
    END as salary_level
FROM employees;
-- 简单CASE
SELECT
    product_type,
    CASE product_type
        WHEN 'A' THEN 'Type A'
        WHEN 'B' THEN 'Type B'
        ELSE 'Other'
    END as type_description
FROM products;
(2)空值处理
-- COALESCE(返回第一个非空值)
SELECT coalesce(NULL, NULL, 'default'); -- 'default'
SELECT coalesce(email, 'N/A') FROM users; -- 如果email为NULL则返回'N/A'
-- NULLIF(相等返回NULL)
SELECT nullif(5, 5); -- NULL
SELECT nullif(5, 0); -- 5
-- GREATEST和LEAST
SELECT greatest(1, 5, 3); -- 5
SELECT least(1, 5, 3); -- 1

5. 聚合函数

(1)基本聚合函数
-- 计数
SELECT count(*) FROM table; -- 总行数
SELECT count(DISTINCT column) FROM table; -- 不重复计数
-- 求和与平均
SELECT sum(salary) FROM employees;
SELECT avg(salary) FROM employees;
-- 最大最小值
SELECT max(salary) FROM employees;
SELECT min(salary) FROM employees;
-- 统计信息
SELECT stddev(salary) FROM employees; -- 标准差
SELECT variance(salary) FROM employees; -- 方差
(2)高级聚合函数
-- 分组统计
SELECT
    department,
    count(*) as emp_count,
    avg(salary) as avg_salary,
    sum(salary) as total_salary
FROM employees
GROUP BY department;
-- 字符串聚合
SELECT
    department,
    string_agg(name, ', ') as employees
FROM employees
GROUP BY department;
-- 数组聚合
SELECT
    department,
    array_agg(name) as employees
FROM employees
GROUP BY department;
-- JSON聚合
SELECT
    department,
    json_agg(json_build_object('name', name, 'salary', salary)) as employees
FROM employees
GROUP BY department;

6. 窗口函数

(1)排名函数
-- 行号、排名、密集排名
SELECT
    name,
    salary,
    row_number() OVER (ORDER BY salary DESC) as row_num,
    rank() OVER (ORDER BY salary DESC) as rank,
    dense_rank() OVER (ORDER BY salary DESC) as dense_rank
FROM employees;
-- 分区排名
SELECT
    department,
    name,
    salary,
    rank() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank
FROM employees;
(2)前后值函数
-- LAG和LEAD(访问前后行)
SELECT
    date,
    sales,
    lag(sales) OVER (ORDER BY date) as prev_sales,
    lead(sales) OVER (ORDER BY date) as next_sales
FROM sales_data;
-- FIRST_VALUE和LAST_VALUE
SELECT
    date,
    sales,
    first_value(sales) OVER (ORDER BY date) as first_sales,
    last_value(sales) OVER (ORDER BY date) as last_sales
FROM sales_data;
(3)累计和移动平均
-- 累计计算
SELECT
    date,
    sales,
    sum(sales) OVER (ORDER BY date) as cumulative_sum,
    avg(sales) OVER (ORDER BY date) as cumulative_avg
FROM sales_data;
-- 移动平均
SELECT
    date,
    sales,
    avg(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_avg_3
FROM sales_data;

7. JSON 函数(PostgreSQL 9.3+)

(1)JSON新建和解析
-- 创建JSON
SELECT json_build_object('name', 'John', 'age', 30);
SELECT json_build_array(1, 2, 3);
-- 解析JSON
SELECT json_extract_path('{"a": {"b": 1}}', 'a', 'b'); -- 1
SELECT '{"name": "John"}'::json->>'name'; -- 'John'
SELECT '{"ages": [10, 20, 30]}'::json->'ages'->>1; -- '20'
(2)JSON聚合
-- 行转JSON
SELECT row_to_json(employees) FROM employees WHERE id = 1;
-- JSON聚合
SELECT
    department,
    json_agg(json_build_object('name', name, 'salary', salary)) as employees
FROM employees
GROUP BY department;

三、实用SQL示例

1. 数据备份和恢复

# 备份单个数据库
pg_dump -U username -d mydatabase -f backup.sql
# 备份所有数据库
pg_dumpall -U username -f alldb_backup.sql
# 压缩备份
pg_dump -U username -d mydatabase | gzip > backup.sql.gz
# 恢复数据库
psql -U username -d mydatabase -f backup.sql
# 恢复压缩备份
gunzip -c backup.sql.gz | psql -U username -d mydatabase

2. 性能分析

-- 查看查询计划
EXPLAIN SELECT * FROM large_table WHERE id = 1000;
EXPLAIN ANALYZE SELECT * FROM large_table WHERE id = 1000;
-- 查看表大小和索引
SELECT
    schemaname,
    tablename,
    tableowner,
    tablesize,
    indexsize
FROM pg_tables
WHERE schemaname = 'public';
-- 查看长查询
SELECT
    pid,
    now() - pg_stat_activity.query_start AS duration,
    query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;

3. 实用管理查询

-- 查看锁信息
SELECT
    locktype,
    relation::regclass,
    mode,
    granted
FROM pg_locks
WHERE relation = 'mytable'::regclass;
-- 查看连接数
SELECT
    datname,
    count(*) as connections
FROM pg_stat_activity
GROUP BY datname;
-- 查看表统计信息
SELECT
    schemaname,
    tablename,
    seq_scan,
    seq_tup_read,
    idx_scan,
    idx_tup_fetch
FROM pg_stat_user_tables;

四、总结

结合项目来看,PostgreSQL 提供了丰富的命令行工具和内置函数,使得数据库管理和数据操作变得很高效。关键点包括:

  1. psql命令行:熟练掌握连接参数和元命令,提高管理效率
  2. 数学函数:处理数值计算和统计分析
  3. 字符串函数:文本处理和格式化输出
  4. 日期时间函数:时间计算和格式化
  5. 聚合函数:数据统计和分组分析
  6. 窗口函数:高级分析和排名计算
  7. JSON函数:处理半结构化数据

相关文献

【数据库知识】PostgreSQL介绍

到此这篇关于PGSQL常用命令行与函数实例详解的文章就介绍到这了,更多相关PGSQL常用命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

您可能感兴趣的文章:
  • pgsql的UUID生成函数实例
  • postgresql数据库基本操作及命令详解
  • PostgreSQL 的 COPY 命令深度解析
  • PostgreSQL数据库命令行执行SQL脚本的三种方式
  • 详解PostgreSQL启动停止命令(重启)
  • PostgreSQL中的psql命令详解
  • PostgreSQL copy 命令教程详解
  • 在postgresql中借助命令行执行sql文件

相关文章

精彩推荐