
0. 前言
1. 执行不带变量的SQL脚本
1.1 准备一个测试用的SQL脚本(不含变量)
cat > sess.sql <<EOF
select pid,usename,application_name,xact_start,query_start,waiting,state
from pg_stat_activity
where state = 'active';
EOF
1.2 在gsql里面调用SQL脚本:\i 脚本文件名
gsql -r
\i sess.sql
pid | usename | application_name | xact_start | query_start | waiting | state
----------------+---------+------------------+-------------------------------+-------------------------------+---------+--------
22872621315840 | tpcc | gsql | 2024-07-10 15:40:21.179175+08 | 2024-07-10 15:40:21.179175+08 | f | active
22846861993728 | tpcc | JobScheduler | | | f | active
1.3 在Shell环境执行gsql + SQL脚本
gsql -f sess.sql
pid | usename | application_name | xact_start | query_start | waiting | state
----------------+---------+------------------+-------------------------------+-------------------------------+---------+--------
22873709213440 | tpcc | gsql | 2024-07-10 15:49:29.524565+08 | 2024-07-10 15:49:29.524565+08 | f | active
22846861993728 | tpcc | JobScheduler | | | f | active
gsql < sess.sql
pid | usename | application_name | xact_start | query_start | waiting | state
----------------+---------+------------------+-------------------------------+-------------------------------+---------+--------
22873349551872 | tpcc | gsql | 2024-07-10 15:56:06.868991+08 | 2024-07-10 15:56:06.868991+08 | f | active
22846861993728 | tpcc | JobScheduler | | | f | active
gsql -c "\i sess.sql"
pid | usename | application_name | xact_start | query_start | waiting | state
----------------+---------+------------------+-------------------------------+-------------------------------+---------+--------
22872307726080 | tpcc | gsql | 2024-07-10 16:00:04.077213+08 | 2024-07-10 16:00:04.077213+08 | f | active
22846861993728 | tpcc | JobScheduler | | | f | active
2. 执行带变量的SQL脚本
2.1 gsql中的变量使用
gsql命令行选项: -v 变量名称=变量值 gsql内赋值: \set 变量名称 变量值 gsql内交互式输入: \prompt 变量名称
2.2 gsql中的数字类型变量使用
cat > relsize.sql <<EOF
select relname,relpages*8192/1024/1024 relsize
from pg_class
where relpages * 8192/1024/1024 > :size
order by relsize desc;
EOF
gsql -v size=10 -f relsize.sql
relname | relsize
-----------------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
snap_class_vital_info | 40.25
snap_global_config_settings | 35.65625
snap_global_stat_all_tables | 33.25
snap_summary_stat_all_indexes | 32.4453125
snap_summary_statio_all_indexes | 31.7265625
snap_global_statio_all_tables | 26.1953125
snap_summary_stat_all_tables | 21.34375
snap_summary_statio_all_tables | 17.9921875
snap_summary_transactions_running_xacts | 16.5703125
snap_global_transactions_running_xacts | 16.4921875
snap_global_thread_wait_status | 16.3828125
pg_toast_2618 | 13.6875
snap_global_os_threads | 11.3359375
(15 rows)
gsql -f relsize.sql -v size=30
relname | relsize
---------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
snap_class_vital_info | 40.25
snap_global_config_settings | 35.65625
snap_global_stat_all_tables | 33.25
snap_summary_stat_all_indexes | 32.4453125
snap_summary_statio_all_indexes | 31.7265625
gsql
\set size 10
\i relsize.sql
relname | relsize
-----------------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
snap_class_vital_info | 40.25
snap_global_config_settings | 35.65625
snap_global_stat_all_tables | 33.25
snap_summary_stat_all_indexes | 32.4453125
snap_summary_statio_all_indexes | 31.7265625
snap_global_statio_all_tables | 26.1953125
snap_summary_stat_all_tables | 21.34375
snap_summary_statio_all_tables | 17.9921875
snap_summary_transactions_running_xacts | 16.5703125
snap_global_transactions_running_xacts | 16.4921875
snap_global_thread_wait_status | 16.3828125
pg_toast_2618 | 13.6875
snap_global_os_threads | 11.3359375
(15 rows)
gsql
\prompt size
30
\i relsize.sql
relname | relsize
---------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
snap_class_vital_info | 40.25
snap_global_config_settings | 35.65625
snap_global_stat_all_tables | 33.25
snap_summary_stat_all_indexes | 32.4453125
snap_summary_statio_all_indexes | 31.7265625
(7 rows)
cat > relsize_p.sql <<EOF
\echo Please input value of size:
\prompt size
select relname,relpages*8192/1024/1024 relsize
from pg_class
where relpages * 8192/1024/1024 > :size
order by relsize desc;
EOF
gsql -f relsize_p.sql
Please input value of size:
40
relname | relsize
--------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
snap_class_vital_info | 40.25
(3 rows)
gsql
\i relsize_p.sql
MogDB=# \i relsize_p.sql
Please input value of size:
41
relname | relsize
--------------------------------+------------
snap_global_stat_all_indexes | 45.5546875
snap_global_statio_all_indexes | 41.8125
(2 rows)
2.3 gsql中的字符串类型变量使用
select name,setting
from pg_settings
where name ~ '参数名称'
order by name;
select name,setting
from pg_settings
where name ~ ':name'
order by name;
gsql -r
\set name index
select name,setting
from pg_settings
where name ~ ':name'
order by name;
name | setting
------+---------
(0 rows)
gsql -r
\set name 'index'
\echo :name
select name,setting
from pg_settings
where name ~ :name
order by name;
MogDB=# \set name 'index'
MogDB=# \echo :name
index
MogDB=# select name,setting
MogDB-# from pg_settings
MogDB-# where name ~ :name
MogDB-# order by name;
ERROR: column "index" does not exist
LINE 3: where name ~ index
\set name '''index'''
\set name '''index'''
\echo :name
select name,setting
from pg_settings
where name ~ :name
order by name;
MogDB=# \set name '''index'''
MogDB=# \echo :name
'index'
MogDB=# select name,setting
MogDB-# from pg_settings
MogDB-# where name ~ :name
MogDB-# order by name;
name | setting
----------------------------------+---------
cost_weight_index | 1
cpu_index_tuple_cost | 0.005
enable_default_index_compression | off
enable_hypo_index | off
enable_index_nestloop | on
enable_indexonlyscan | on
enable_indexscan | on
enable_indexscan_optimization | off
ignore_system_indexes | off
max_index_keys | 32
(10 rows)
\prompt name
'index'
select name,setting
from pg_settings
where name ~ :name
order by name;
name | setting
----------------------------------+---------
cost_weight_index | 1
cpu_index_tuple_cost | 0.005
enable_default_index_compression | off
enable_hypo_index | off
enable_index_nestloop | on
enable_indexonlyscan | on
enable_indexscan | on
enable_indexscan_optimization | off
ignore_system_indexes | off
max_index_keys | 32
(10 rows)
cat > para.sql <<EOF
select name,setting
from pg_settings
where name ~ :name
order by name;
EOF
gsql -v name=\'index\' -f para.sql
name | setting
----------------------------------+---------
cost_weight_index | 1
cpu_index_tuple_cost | 0.005
enable_default_index_compression | off
enable_hypo_index | off
enable_index_nestloop | on
enable_indexonlyscan | on
enable_indexscan | on
enable_indexscan_optimization | off
ignore_system_indexes | off
max_index_keys | 32
(10 rows)
gsql -v name=\'ind ex\' -f para.sql
gsql: FATAL: database "ex'" does not exist
gsql -v name="'index'" -f para.sql
name | setting
----------------------------------+---------
cost_weight_index | 1
cpu_index_tuple_cost | 0.005
enable_default_index_compression | off
enable_hypo_index | off
enable_index_nestloop | on
enable_indexonlyscan | on
enable_indexscan | on
enable_indexscan_optimization | off
ignore_system_indexes | off
max_index_keys | 32
(10 rows)
3. 总结
gsql调用SQL脚本有三种方法: gsql输入界面中 \i 文件名 SHELL中 gsql -f 文件名 SHELL中 gsql -c "\i 文件名" SQL中变量符号为 :变量名 传递变量有三种方法: gsql输入界面中 \set 变量名 变量值 SHELL中 gsql -v 变量名=变量值 SQL中或者gsql中使用 \prmopt 变量名进行交互式输入 字符串值变量使用: 不能在SQL中直接用单引号括起 :变量名 \set var 时变量值前后各三个单引号 \prompt 时前后各一个单引号 gsql -v时变量值里层单引号,外层双引号 是否交互性输入是两种不同的用法,建议使用不同的脚本文件
关于作者
END
MogDB 是云和恩墨基于 openGauss 开源内核进行增强提升,推出的一款安稳易用的企业级关系型数据库。其具备金融级高可用和全密态计算的极致安全、面向多核处理器的极致性能、AI自诊断调优的极致智能能力,能够满足从核心交易到复杂计算的企业级业务需求。
访问官网了解更多:www.mogdb.io
产品兼容适配申请:partner@enmotech.com
加微信进入交流群:Roger_database


文章转载自MogDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




