MS SQL中DECLARE、SET变量声明在PostgreSQL中的替代用法是什么
PostgreSQL 等效MS SQL变量声明及调用实现方案
PostgreSQL 没有和MS SQL完全一致的DECLARE @变量的原生会话级语法,根据使用场景有以下几种实现方式:
1. psql交互客户端临时变量(适用日常手动查询场景)
这是最贴近需求的轻量方案,变量仅在当前客户端会话内生效:
- 声明变量:
\set countryname 'China'
- 后续查询调用:
SELECT * FROM country_table WHERE country = :'countryname';
- 注意事项:
- 字符串类型变量调用时需要加单引号包裹占位符
:'countryname',数值类型可以直接写:变量名 - 主流第三方数据库工具(DBeaver、DataGrip等)均支持该语法
- 字符串类型变量调用时需要加单引号包裹占位符
2. 会话级自定义参数(通用全场景,兼容所有连接工具)
如果需要变量在整个数据库连接会话内、跨多个查询/事务都可调用,优先用自定义配置参数方案:
- 声明赋值:
SET myvars.countryname = 'China'; -- 也可以用函数赋值,第三个参数为false表示全局会话生效,true表示仅当前事务生效 SELECT set_config('myvars.countryname', 'China', false);
参数前缀可以自定义,比如
app.、tmp.都可以,只要不是PostgreSQL内置参数前缀即可
- 后续查询调用:
SELECT * FROM country_table WHERE country = current_setting('myvars.countryname');
说明:PostgreSQL的
TEXT类型和MS SQL的nvarchar(max)完全等效,无需指定长度,性能一致。
3. PL/pgSQL块/存储过程内变量(适用函数、存储过程逻辑场景)
如果是在PL/pgSQL的代码块内使用变量,写法和MS SQL的DECLARE逻辑接近:
DO $$ DECLARE countryname TEXT := 'China'; BEGIN -- 块内执行查询,示例:输出匹配结果数量 RAISE NOTICE '匹配的国家数量:%', (SELECT COUNT(*) FROM country_table WHERE country = countryname); -- 如果需要返回查询结果集,可以改为创建FUNCTION返回TABLE类型 END $$;
内容的提问来源于stack exchange,提问作者Raj Gupta
相关产品推荐
相关产品推荐

