CR is not removed with psql -f command on Windows.

Started by okano.naoki@fujitsu.comalmost 5 years ago3 messagesbugs
Jump to latest
#1okano.naoki@fujitsu.com
okano.naoki@fujitsu.com

Hi,

I am using Windows OS.
When creating a function with the psql -f filename command, the prosrc in pg_proc catalog contains \r(CR).
But I expect \r to be deleted. Is this a bug?
# If I use the psql < test.sql command, the prosrc in pg_proc catalog does not contain \r(CR).

[Environment]
* Windows 10
* PostgreSQL 13.3, compiled by Visual C + build 1914, 64 bit

[Reproduction]
(1) Create test.sql describing the following (The newline is CRLF)

CREATE OR REPLACE FUNCTION test_func(i integer) RETURNS integer AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;

(2) psql -f test.sql

(3) psql -c "SELECT proname, prosrc FROM pg_proc WHERE proname = 'test_func';"
The result of (3) above contains \r in the prosrc in pg_proc.

proname | prosrc
-----------+---------------------
test_func | \r +
| BEGIN\r +
| RETURN i + 1;\r+
| END;\r +

I found a similar bug report below.
Is it related to this problem?
* /messages/by-id/20201028204654.GD3239@momjian.us

Regards,
Naoki, Okano

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: okano.naoki@fujitsu.com (#1)
Re: CR is not removed with psql -f command on Windows.

"okano.naoki@fujitsu.com" <okano.naoki@fujitsu.com> writes:

When creating a function with the psql -f filename command, the prosrc in pg_proc catalog contains \r(CR).

Does that cause you any actual problems?

But I expect \r to be deleted. Is this a bug?

I'm kind of inclined to ignore it, mainly because of the law of unintended
consequences: adding code to strip \r is likely to break some scenario
that's working fine for somebody else.

I see that psql opens -f files with PG_BINARY_R, but that seems to be
a very ancient decision so I'm hesitant to change it.

regards, tom lane

#3okano.naoki@fujitsu.com
okano.naoki@fujitsu.com
In reply to: Tom Lane (#2)
RE: CR is not removed with psql -f command on Windows.

Thank you for your reply.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>

When creating a function with the psql -f filename command, the prosrc in pg_proc catalog contains \r(CR).

Does that cause you any actual problems?

There is actual no problem.
However, I was puzzled by the difference between psql -f and psql < .

But I expect \r to be deleted. Is this a bug?

I'm kind of inclined to ignore it, mainly because of the law of unintended
consequences: adding code to strip \r is likely to break some scenario
that's working fine for somebody else.

I see that psql opens -f files with PG_BINARY_R, but that seems to be
a very ancient decision so I'm hesitant to change it

As you said, changing to remove \r will affect somebody,
so I understand changing the behavior is difficult.

I think it is not necessary to change the mode from PG_BINARY_R,
because it is enough to remove \r in gets_fromFile() function in src/bin/psql/input.c.

Regards,
Naoki, Okano