Postgres: copy errors when extra tab on tab delimited text file - postgresql

I have the three statements below that all work until it hits a row with an extra tab at the end of the tab delimited text file that I am trying to import.
Any way to tell Postgres to ignore extra tabs?
copy mara FROM 'c:/Postgres MME/AG00_MARA.txt' DELIMITER E'\t' NULL '' CSV HEADER;
copy mara FROM 'c:/Postgres MME/AG00_MARA.txt' DELIMITER E'\t' CSV HEADER;
copy mara FROM 'c:/Postgres MME/AG00_MARA.txt' WITH (FORMAT csv, DELIMITER E'\t', NULL '', HEADER);
Image of Notepad++ Where I see the extra tab at the end of the row

Don't try to ignore it, just fix your data by removing all the trailing tabs with regex \t$. For example in Linux:
sed -i 's/\t$//g' AG00_MARA.txt

Related

Postgresql Copy from text file with a newline character column

I m trying to import a txt file into a postgresql table. However, in the txt data, there is a value including newline.
When exporting txt file, I can change row seperator different than "\n" but i couldnt find any parameter to change row seperator for copy command.
OS: linux
Is there a row seperator parameter for copy command in postgresql?
Example:
Txt file:( delimiter "|")
1st line:
ab|dc|blabla|ef
2nd line:
ab|dc|bla
bla|ef
In the second row , third column include bla (newline) bla.
Postgres command:
copy tablename from 'a.txt' with delimiter '|' null '';

COPY CSV TO POSTGRES TEXTX FIELDS ARE QUOTED

I need to convert csv into postgres table. I using the query below:
copy public.itens_2019 from 'C:\itens.csv' delimiter ',' CSV HEADER;
108,62,'C','Falência de Empresários, Sociedades Empresáriais, Microempresas e Empresas de Pequeno Porte','A',,,,
it is possible to observe that the texts are enclosed in quotation marks, because the text has commas. This way I am not able to extract the columns correctly.
try with the below command
copy public.itens_2019 from 'C:\itens.csv' delimiter ',' CSV HEADER QUOTE '''';
You can try with below query for specific column.
copy table_name(column1,column2,column3,column4,column5) from 'C:\itens.csv' DELIMITERS ',' CSV;

Postgres COPY command with literal delimiter

I was trying to import a CSV file into a PostgreSQL table using the COPY command. The delimiter of the CSV file is comma (,). However, there's also a text field with a comma in the value. For example:
COPY schema.table from '/folder/foo.csv' delimiter ',' CSV header
Here's the content of the foo.csv file:
Name,Description,Age
John,Male\,Tall,30
How to distinguish between the literal comma and the delimiter?
Thanks for your help.
To have the \ to be recognized as a escape character it is necessary to use the text format
COPY schema.table from '/folder/foo.csv' delimiter ',' TEXT
But then it is also necessary to delete the first line as the HEADER option is only valid for the CSV format.

COPY command and newline error

I have my simple CSV file, delimited by commas and no strange character, and when trying to do a \COPY table FROM '/srv/www/.../CSV.csv' WITH DELIMITER ',' I get the error
ERROR: literal newline found in data
HINT: Use "\n" to represent newline.
Its not the first time I execute a COPY and it never happened to me. I exported the CSV from excel to Notepad and saved here as CSV (I know some programs add extra info, but AFAIK notepad does not)
If you want to import CSV, you must specify FORMAT CSV. A literal newline is not legal in PostgreSQL's default delimited input.
\COPY table FROM '/srv/www/.../CSV.csv' WITH (FORMAT CSV, DELIMITER ',');

Ignore quotation marks when importing a CSV file into PostgreSQL?

I'm trying to import a tab-delimited file into my PostgreSQL database. One of the fields in my file is a "title" field, which occasionally contains actual quotation marks. For example, my tsv might look like:
id title
5 Hello/Bleah" Foo
(Yeah, there's just that one quotation mark in the title.)
When I try importing the file into my database:
copy articles from 'articles.tsv' with delimiter E'\t' csv header;
I get this error, referencing that line:
ERROR: unterminated CSV quoted field
How do I fix this? Quotation marks are never used to surround entire fields in the file. I tried copy articles from 'articles.tsv' with delimiter E'\t' escape E'\\' csv header; but I get the same error on the same line.
Assuming the file never actually tries to quote its fields:
The option you want is "with quote", see http://www.postgresql.org/docs/8.2/static/sql-copy.html
Unfortunately, I'm not sure how to turn off quote processing altogether, one kludge would be to specify a character that does not appear in your file at all.
Tab separated is the default format for copy statements. Treating them as CSV is just silly. (do you take this path just to skip the header ?)
copy articles from 'articles.tsv';
does exactly what you want.
I struggled with the same error and a few more. Finally gathering knowledge from few SO questions I came up with the following setup for making COPY TO/FROM successful even for quite sophisticated JSON columns:
COPY "your_schema_name.yor_table_name" (your, column_names, here)
FROM STDIN WITH CSV DELIMITER E'\t' QUOTE '\b' ESCAPE '\';
--here rows data
\.
the most important parts:
QUOTE '\b' - quote with backspace (thanks a lot #grautur!)
DELIMITER E'\t' - delimiter with tabs
ESCAPE '\' - and escape with a backslash