Re: invalid data in file backup_label problem on windows - Mailing list pgsql-hackers

From David Steele
Subject Re: invalid data in file backup_label problem on windows
Date
Msg-id 5ff980d8-25bf-ca11-4b4a-a11be7e59292@pgmasters.net
Whole thread Raw
In response to Re: invalid data in file backup_label problem on windows  (Magnus Hagander <magnus@hagander.net>)
Responses Re: invalid data in file backup_label problem on windows  (Andrew Dunstan <andrew@dunslane.net>)
List pgsql-hackers
On 3/21/21 10:40 AM, Magnus Hagander wrote:
> On Sat, Mar 20, 2021 at 3:10 AM wangsh.fnst@fujitsu.com
> <wangsh.fnst@fujitsu.com> wrote:
>>
>> David Steele <david@pgmasters.net> wrote:
>>
>>> It's not clear to me what text editors have to do with this? Are you
>>> editing the file manually?
>>
>> When I execute SELECT * FROM pg_stop_backup(false, true) in psql.
>>
>> The results will be shown like:
>>              lsn    |                           labelfile                           | spcmapfile
>>          ------------+---------------------------------------------------------------------+------------
>>          0/2000138 | START WAL LOCATION: 0/2000028 (file 000000010000000000000002)+|
>>                     | CHECKPOINT LOCATION: 0/2000060                               +|
>>                     | BACKUP METHOD: streamed                                     +|
>>                     | BACKUP FROM: master                                          +
>>          ......
>> The results only will be shown on screen and this function will not generate any files. What I do is write
>> the second field(labelfile) to a new file backup_label and write the third field(spcmapfile) to tablespace_map if
>> the third field is not null.
>>
>> Therefore, I choose a text editor to help me write the file.
>> I copy the a line in second field and paste this to text editor and press the 'enter' key, repeat this action util
>> all the line have be pasted to text editor, then save the file.
>>
>> If this is not a good way to create the backup_label file, can you tell me how can I create this file on windows?
> 
> These APIs are really not designed to be run manually from a CLI and
> copy/paste the results.
> 
> Running them from literally any script or program should make that
> easy, by getting the actual value out and storing it.

You might consider using pg_basebackup, which does all this for you and 
is well tested.

>> I think the real problem is this file on windows is opened with binary mode. If I use libpq to get the result and
write
>> the result to file directly(the default action on windows is open file in text mode), this problem will be
happened.
>> So I consider this is a bug.
> 
> No, the problem is you are using copy/paste and in doing so you are
> *changing'* the value that is being returned. You'll either need to
> update your copy/paste procedure to not mess with the newlines, or to
> use a better way to get the data out.
> 
> If we need to clarify that in the documentation, I'm fine with that.
> Maybe add an extra sentence to the part about not modifying the output
> to mention that this includes changing newslines and also encoding
> (which would also break it, if you managed to find a non-ascii
> compatible encoding). Maybe even something along the line of "the
> contents have to be written in binary mode"?

Perhaps something like the attached?

Regards,
-- 
-David
david@pgmasters.net

Attachment

pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: WIP: BRIN multi-range indexes
Next
From: Tomas Vondra
Date:
Subject: Re: WIP: BRIN multi-range indexes