PostgreSQL 10 & pgAdmin4中如何在查询中简单使用变量?
在PostgreSQL中实现变量声明与复用的方案
在PostgreSQL里实现类似SQL Server的变量声明和复用,其实有几种不同的方案,取决于你使用的场景(比如psql命令行、pgAdmin查询窗口,或者编写存储过程/函数),我给你整理几个最常用的:
1. psql命令行或pgAdmin SQL编辑器:使用\set元命令
如果你是在psql终端或者pgAdmin的查询窗口里执行SQL,可以用PostgreSQL自带的\set元命令来定义变量,之后用:变量名的方式引用,还能随时修改变量值复用:
-- 声明并初始化字符串变量 \set find 'search_value' -- 使用变量执行查询(注意字符串变量需要用:'变量名'的格式,确保引号被正确解析) SELECT * FROM schema_name.table_name WHERE schema_name.table_name.field_name = :'find'; -- 修改变量值,复用它 \set find 'new_search_value' -- 再次执行查询,使用新的变量值 SELECT * FROM schema_name.table_name WHERE schema_name.table_name.field_name = :'find';
如果是数字类型的变量,直接用:find就行,不需要加引号包裹。
2. PL/pgSQL中使用变量(适合逻辑处理或封装查询)
如果你需要写带有逻辑的代码(比如循环、条件判断),或者想把查询封装起来复用,可以用PostgreSQL的过程语言PL/pgSQL,它支持类似SQL Server的变量声明语法:
匿名块示例(适合临时测试逻辑)
DO $$ DECLARE -- 声明并初始化变量,语法和SQL Server类似,只是用:=赋值 find varchar(30) := 'search_value'; BEGIN -- 这里可以执行查询,如果要查看结果,用RAISE NOTICE打印统计值 RAISE NOTICE '第一次查询结果数量: %', (SELECT COUNT(*) FROM schema_name.table_name WHERE field_name = find); -- 修改变量值 find := 'new_search_value'; -- 再次执行查询 RAISE NOTICE '第二次查询结果数量: %', (SELECT COUNT(*) FROM schema_name.table_name WHERE field_name = find); END $$;
函数封装(适合返回完整查询结果)
如果需要直接返回查询的数据集,推荐写一个函数:
CREATE OR REPLACE FUNCTION get_table_data(p_find varchar(30)) RETURNS SETOF schema_name.table_name AS $$ BEGIN RETURN QUERY SELECT * FROM schema_name.table_name WHERE field_name = p_find; END $$ LANGUAGE plpgsql; -- 调用函数,传入不同的搜索值 SELECT * FROM get_table_data('search_value'); SELECT * FROM get_table_data('new_search_value');
3. 临时复用:用WITH子句模拟变量
如果只是在单个查询里临时复用某个值,不需要持久化变量,可以用CTE(WITH子句)来模拟“变量”:
-- 定义变量并第一次查询 WITH vars AS (SELECT 'search_value'::varchar(30) AS find) SELECT t.* FROM schema_name.table_name t JOIN vars ON t.field_name = vars.find; -- 修改值后再次查询 WITH vars AS (SELECT 'new_search_value'::varchar(30) AS find) SELECT t.* FROM schema_name.table_name t JOIN vars ON t.field_name = vars.find;
内容的提问来源于stack exchange,提问作者Pieter Coetzer
相关产品推荐
相关产品推荐

