Bruce Momjian wrote:
>Andrew Dunstan wrote:
>
>
>>Cyril VELTER said:
>>
>>
>>>From: "Andrew Dunstan" <andrew@dunslane.net>
>>>
>>>
>>>
>>>>Cyril VELTER wrote:
>>>>
>>>>
>>>>
>>>>> if you psql -f test.sql basetest from the windows shell to a
>>>>> windows
>>>>>
>>>>>
>>>or
>>>
>>>
>>>>>linux database, you'll get a missing data error :
>>>>>
>>>>>psql:test.sql:9: ERROR: missing data for column "b"
>>>>>CONTEXT: COPY test, line 1: "a"
>>>>>
>>>>> if you psql -f test.sql basetest from a linux shell to a windows
>>>>> or
>>>>>linux database, you won't get an error
>>>>>
>>>>>
>>>>Sounds like we should have psql open the file in binary mode on
>>>>Windows. Would that cause problems? I doubt it, but I wonder.
>>>>
>>>>
>>>>
>>> you might be right, I just found some information on msdn that fseek
>>> for
>>>example is influenced by ctrl-z when the file is opened in text mode.
>>>
>>> I'm not sure that this is the cause of the second problem (backend
>>> crash
>>>on copy to) though.
>>>
>>> do you known where this modification needs to be done ?
>>>
>>> cyril
>>>
>>>
>>>
>>probably in src/bin/psql/command.c::process_file()
>>
>>instead of mode "r" we should probably use the predefined constant
>>PG_BINARY_R
>>
>>
>
>Uh, but it isn't a binary file, it is SQL commands.
>
>
>
If it can have an embedded ^Z it is not a legal Windows text file.
Adding the binary flag will have exactly 2 effects:
1. It will inhibit the behaviour of the driver in translating CRLF to
plain LF
2. It will not see ^Z as EOF.
We don't care about the first - we handle CRLF just fine. But we do care
about the second, and we don't want the library to interpret ^Z as EOF.
cheers
andrew