BUG #17736: when psql -c is used, the $ sign is escaped
The following bug has been logged on the website:
Bug reference: 17736
Logged by: dafoer_x
Email address: dafoer_x@163.com
PostgreSQL version: 14.0
Operating system: centos
Description:
[pg14@VM-219-249-centos ~]$ psql -d postgres -p 29822 -h 127.0.0.1 -c "set
lc_monetary='en_US.UTF-8'; drop table if exists t_mony; create table
t_mony(c1 bigint,c2 money); insert into t_mony values(2,'$1.00'); select *
from t_mony;"
c1 | c2
----+-------
2 | $0.00
(1 row)
postgres=# set lc_monetary='en_US.UTF-8'; drop table if exists t_mony;
create table t_mony(c1 bigint,c2 money); insert into t_mony
values(2,'$1.00'); select * from t_mony;
SET
DROP TABLE
CREATE TABLE
INSERT 0 1
c1 | c2
----+-------
2 | $1.00
(1 row)
Because $ is escaped, the results are different when the same command is
executed in psql and internally.
I would like to ask how to solve this problem, or why there is this
difference?
Regards
On Wed, Jan 4, 2023 at 5:00 PM PG Bug reporting form <noreply@postgresql.org>
wrote:
Because $ is escaped, the results are different when the same command is
executed in psql and internally.
I would like to ask how to solve this problem, or why there is this
difference?
When passing a quoted argument to psql, it is necessary to account for the
shell's interpretation, for example:
$ echo "foo $1"
foo
$ echo "foo \$1"
foo $1
--
John Naylor
EDB: http://www.enterprisedb.com