如何将 bash 数组转换为 PSQL 数组
How to convert bash array to PSQL array
我有一个 bash 脚本和一个数组变量。
数组初始化为...
ARRVAR=( 0001 0002 0003 )
现在,我想在PSQL中使用数组进行查询。
这是我的查询...
QUERY1="SELECT * FROM table WHERE column1 && '$psql_array'"
column1 是 varchar[] 类型,它与另一个数组(psql_array)进行比较,这应该是 bash 数组变量转换为 PSQL数组。
是否有任何可能或简单的方法将 bash 数组转换为 PSQL 数组?
# printf to a variable (psql_array) replacing single quotes by two single quotes
printf -v psql_array "'%s'," "${ARRVAR[@]//\'/\'\'}"
# remove the trailing ,
psql_array=${psql_array%,}
# check
echo "($psql_array)"
# or to have a postgresql varchar[]
# escape double quote between double quotes
printf -v psql_array "\"%s\"," "${ARRVAR[@]//\"/\\"}"
psql_array=${psql_array%,}
echo "{$psql_array}"
# or easier
printf -v psql_array "'%s'::varchar," "${ARRVAR[@]//\'/\'\'}"
echo "ARRAY[${psql_array%,}]"
我有一个 bash 脚本和一个数组变量。 数组初始化为...
ARRVAR=( 0001 0002 0003 )
现在,我想在PSQL中使用数组进行查询。 这是我的查询...
QUERY1="SELECT * FROM table WHERE column1 && '$psql_array'"
column1 是 varchar[] 类型,它与另一个数组(psql_array)进行比较,这应该是 bash 数组变量转换为 PSQL数组。
是否有任何可能或简单的方法将 bash 数组转换为 PSQL 数组?
# printf to a variable (psql_array) replacing single quotes by two single quotes
printf -v psql_array "'%s'," "${ARRVAR[@]//\'/\'\'}"
# remove the trailing ,
psql_array=${psql_array%,}
# check
echo "($psql_array)"
# or to have a postgresql varchar[]
# escape double quote between double quotes
printf -v psql_array "\"%s\"," "${ARRVAR[@]//\"/\\"}"
psql_array=${psql_array%,}
echo "{$psql_array}"
# or easier
printf -v psql_array "'%s'::varchar," "${ARRVAR[@]//\'/\'\'}"
echo "ARRAY[${psql_array%,}]"