On Wed, May 5, 2021, at 19:58, David G. Johnston wrote:
> On Wed, May 5, 2021 at 10:34 AM Isaac Morland <isaac.morl...@gmail.com> wrote:
>> On Wed, 5 May 2021 at 13:23, Chapman Flack <c...@anastigmatix.net> wrote:
>>> On 05/05/21 13:02, David G. Johnston wrote:
>>> > Why not just allow: "DELIMITER NONE" to be valid syntax meaning exactly
>>> > what it says and does exactly what you desire?
>>> 
>>> What would it mean? That you get one column, multiple rows of text
>>> corresponding to "lines" delimited by something, or that you get one
>>> column, one row of text for the entire content of the file?
>> 
>> It means no column delimiter. In other words, there is no character which 
>> marks the end of a data value, so the entire line is a single data value.
>> 
> 
> This.  When dealing with COPY it's expected that each line becomes its own 
> row.  On the server you can do pg_read_file() if you need the entire file to 
> be considered a single value.  psql (\I and variables) is a bit more hackey, 
> but I'd rather see that improved directly anyway if the goal is to try and 
> make getting the "whole document" easier - copy isn't the right API for that 
> IMO.

I think you misunderstood the problem.
I don't want the entire file to be considered a single value.
I want each line to become its own row, just a row with a single column.

So I actually think COPY seems like a perfect match for the job,
since it does precisely that, except there is no delimiter in this case.

I'm currently using the pg_read_file()-hack in a project,
and even though it can read files up to 1GB,
using e.g. regexp_split_to_table() to split on E'\n'
seems to need 4x as much memory, so it only
works with files less than ~256MB.

SELECT COUNT(*) FROM regexp_split_to_table(repeat(E'\n',1000000000),E'\n');
ERROR:  invalid memory alloc request size 4000000004
Time: 4151.374 ms (00:04.151)

/Joel

Reply via email to