2015-01-06 74 views
0

我有许多DB:A,B,C等。 对于每个DB,我创建了只读访问角色:A-ro,B-ro,C-ro。Postgresql:在角色名称中使用变量

每次我连接,I型:

SET ROLE 'A-ro'; 

有些DB的名称可能会很长,这录音是每次不是凉;所以,我想在我的.psqlrc创建别名,以键入类似:

psql> :ro 

我试过两件事情:current_database()和:DBNAME。 问题:看起来我不能写这样的: SET ROLE(SELECT current_database()||'-ro');

而且我可以不写,要么:

SET ROLE ':DBNAME-ro'; 

SET ROLE :DBNAME || '-ro'; 

我正在寻找正确的语法。

+0

你可以使用['EXECUTE'](http://www.postgresql.org/docs/ 9.1 /静态/ PLPGSQL-statements.html#PLPGSQL语句执行的-DYN)。缺点是你必须将其封装到plpgsql函数中。 – ckruse

回答

0

感谢@mdlx的回答,我挖掘出“中间变量”的方式。 这是我的工作.psqlrc提取物:

\set ROLE_RO '''':DBNAME-ro'''' 
\set ro 'SET ROLE ':ROLE_RO; 

切换到RO模式工作:

psql> :ro 
SET 
相关问题