如何在PostgreSQL中利用变量生成dblink连接字符串?
用变量生成指定格式的dblink连接字符串
现有一段PL/pgSQL代码,意图通过定义的变量生成dblink所需的连接字符串:
DO $$ DECLARE _host TEXT := 'localhost'; _port TEXT := '5432'; _user TEXT := 'postgres'; _pass TEXT := 'postgres'; _db TEXT := 'schema'; BEGIN CREATE OR REPLACE VIEW companies AS SELECT id FROM dblink( 'postgresql://' || _user || ':' || _pass || '@' || _host || ':' || _port || '/' || _db, 'select id from company' ) AS t1( id TEXT ); DROP VIEW IF EXISTS companies CASCADE; COMMIT; END $$;
期望生成的连接字符串格式为:
'postgresql://postgres:postgres@localhost:5432/schema'
优化说明
原代码的字符串拼接逻辑是正确的,能够生成目标格式的连接字符串,但可以用format()函数让拼接更简洁易读,同时注意DO块中的两个问题:
- DO块属于匿名代码块,执行完成后会自动提交,无需手动写
COMMIT; - 代码中先创建视图又立刻删除,无实际意义,若仅需测试连接字符串生成,可直接输出拼接结果
优化后的代码示例(仅生成并输出连接字符串):
DO $$ DECLARE _host TEXT := 'localhost'; _port TEXT := '5432'; _user TEXT := 'postgres'; _pass TEXT := 'postgres'; _db TEXT := 'schema'; _conn_str TEXT; BEGIN -- 使用format函数拼接,语法更清晰 _conn_str := format('postgresql://%s:%s@%s:%s/%s', _user, _pass, _host, _port, _db); -- 输出连接字符串到控制台 RAISE NOTICE '生成的连接字符串:%', _conn_str; END $$;
执行后控制台会输出:
NOTICE: 生成的连接字符串:postgresql://postgres:postgres@localhost:5432/schema
内容的提问来源于stack exchange,提问作者Hiep Phan Quang
相关产品推荐
相关产品推荐

