使用psql执行带变量的sql脚本
文章目录
- 环境
- 文档用途
- 详细信息
环境
系统平台:N/A
版本:4.5,9.0
文档用途
介绍
- 日常使用psql进行运维时可以将常用的运维脚本整合为sql文件,并在psql中执行\i可以调用sql文件以提高运维效率。
- 本篇文章将介绍如果sql文件中存在变量,如何在psql中调用该sql文件,更一步提升运维效率。
详细信息
实现流程
脚本准备
准备一个查询表信息的sql脚本,并对表名采用变量的形式进行编辑,脚本参考如下
SELECT:'tablename'AStable_name,pg_size_pretty(pg_relation_size(:'tablename'))ASmain_data_file_size,pg_size_pretty(pg_relation_size(:'tablename','fsm'))ASfsm_size,pg_size_pretty(pg_relation_size(:'tablename','vm'))ASvm_size,pg_size_pretty(pg_relation_size(:'tablename','init'))ASinit_size,pg_size_pretty(pg_relation_size(pg_class.reltoastrelid))AStoast_table_size,pg_size_pretty(pg_table_size(:'tablename'))ASpg_table_size,pg_size_pretty(pg_total_relation_size(:'tablename'))ASpg_total_relation_sizeFROMpg_classWHERErelname=:'tablename';表名为字符串,变量编写应该为:‘tablename’,tablename为变量名,可自定义。
调用脚本
正常使用psql登录后,先给变量赋值,然后测试调用脚本
[root@hgdb1 ~]# psql -U sysdba NOTICE: ------------------------------------------- Login User: sysdba Login time: 2026-03-05 14:22:46.933145+08 Login Address: [local] Last Login Status: SUCCESS Login Failures: 0 Valied Until: infinity ------------------------------------------- psql (4.5) Type "help" for help. highgo=# highgo=# \set tablename test2 highgo=# \i table.sql table_name | main_data_file_size | fsm_size | vm_size | init_size | toast_table_size | pg_table_size | pg_total_relation_size ------------+---------------------+----------+---------+-----------+------------------+---------------+------------------------ test2 | 0 bytes | 0 bytes | 0 bytes | 0 bytes | 0 bytes | 8192 bytes | 8192 bytes 在psql给变量赋值的命令为\set 变量名 赋值,即本次测试为给变量tablename赋值为test2,然后执行\i table.sql调用脚本