在psql CLI中将变量从小写转换为小写

问题描述

我正在创建一个脚本,以通过psql CLI在Postgres中创建数据库用户,我面临的挑战是,从“任何大小写”到“小写”的值转换很令人遗憾,或者找不到相同的解决方案。

\prompt 'Please input user name (must be lowercase): ' inputName
\set lowerVal lower(:inputName)    --This is not working

按照我的期望,lowerVal变量应将inputValue转换为小写值。 谷歌做了,但没有得到相同的解决方案。

解决方法

psql无法计算表达式,因此您的示例无法正常工作。您可以使用语句\gset,该语句评估查询并将结果存储到psql变量中:

postgres=# \prompt 'Please input user name (must be lowercase): ' inputName
Please input user name (must be lowercase): AHOJ
postgres=# select lower(:'inputName') as "inputName" \gset 
postgres=# \echo :inputName
ahoj

对于psql变量名,最好只使用小字符。

另一种可能性是使用带反撇号的shell表达式求值:

postgres=# \set str AHOJ
postgres=# \set str `echo ":str" | tr "[:upper:]" "[:lower:]"`
postgres=# \echo :str
ahoj

此示例仅适用于Unix之类的系统。