| -- |
| -- copy data from file with different EOL and NEWLINE option. |
| -- Using /usr/bin/printf in case of different behaviours on |
| -- different OS, especially on ubuntu18. |
| -- |
| CREATE TABLE copy_eol(id int, seq text); |
| NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' as the Apache Cloudberry data distribution key for this table. |
| HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. |
| --- EOL: '\n' |
| \!/usr/bin/printf '1\x1es1\x5c\n2\x1es2\x5c\n' > /tmp/copy_lf.file; |
| COPY copy_eol FROM '/tmp/copy_lf.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b', NEWLINE 'LF'); |
| COPY copy_eol FROM '/tmp/copy_lf.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b'); |
| SELECT * FROM copy_eol ORDER BY id ASC; |
| id | seq |
| ----+----- |
| 1 | s1\ |
| 1 | s1\ |
| 2 | s2\ |
| 2 | s2\ |
| (4 rows) |
| |
| TRUNCATE copy_eol; |
| --- EOL: '\r' |
| --- produce '\r' step by step on linux |
| \!/usr/bin/printf '1\x1es1\' > /tmp/copy_cr.file; |
| \!/usr/bin/printf '\r' >> /tmp/copy_cr.file; |
| \!/usr/bin/printf '2\x1es2\' >> /tmp/copy_cr.file; |
| \!/usr/bin/printf '\r' >> /tmp/copy_cr.file; |
| COPY copy_eol FROM '/tmp/copy_cr.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b', NEWLINE 'CR'); |
| COPY copy_eol FROM '/tmp/copy_cr.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b'); |
| SELECT * FROM copy_eol ORDER BY id ASC; |
| id | seq |
| ----+----- |
| 1 | s1\ |
| 1 | s1\ |
| 2 | s2\ |
| 2 | s2\ |
| (4 rows) |
| |
| TRUNCATE copy_eol; |
| --- EOL: '\r\n' |
| \!/usr/bin/printf '1\x1es1\\\r\n2\x1es2\\\r\n' > /tmp/copy_crlf.file; |
| COPY copy_eol FROM '/tmp/copy_crlf.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b', NEWLINE 'CRLF'); |
| COPY copy_eol FROM '/tmp/copy_crlf.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b'); |
| SELECT * FROM copy_eol ORDER BY id ASC; |
| id | seq |
| ----+----- |
| 1 | s1\ |
| 1 | s1\ |
| 2 | s2\ |
| 2 | s2\ |
| (4 rows) |
| |
| TRUNCATE copy_eol; |
| --- EOL: '\r\n' with a '\r' in data |
| \!/usr/bin/printf '1\x1es1\\\r\n2\x1es2\\\r\r\n3\x1es3\\\r\n' > /tmp/copy_crlf_1.file; |
| COPY copy_eol FROM '/tmp/copy_crlf_1.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b', NEWLINE 'CRLF'); |
| COPY copy_eol FROM '/tmp/copy_crlf_1.file' (FORMAT 'text', DELIMITER E'\x1e' , NULL E'\x1b\x4e', ESCAPE E'\x1b'); |
| SELECT * FROM copy_eol ORDER BY id ASC; |
| id | seq |
| ----+------- |
| 1 | s1\ |
| 1 | s1\ |
| 2 | s2\\r |
| 2 | s2\\r |
| 3 | s3\ |
| 3 | s3\ |
| (6 rows) |
| |
| TRUNCATE copy_eol; |
| DROP TABLE copy_eol; |