I have a CSV file with 10 columns. After creating a PostgreSQL table with 4 columns, I want to copy some of 10 columns into the table.
the columns of my CSV table are like:
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
the columns of my PostgreSQL table should be like:
x2 x5 x7 x10
Use DictReader method to read all the contents of csv file and pass file object 'f' as an argument to DictReader method. Tranverse through the ereader object using for loop. Write the name of column that you want to display on console using print function.
Create a temporary table with all the columns in the input file
create temporary table t (x1 integer, ... , x10 text)
Copy from the file into it:
copy t (x1, ... , x10) from '/path/to/my_file' with (format csv)
Now insert into the definitive table from the temp:
insert into my_table (x2, x5, x7, x10) select x2, x5, x7, x10 from t
And drop it:
drop table t
Use the file_fdw
extension. As superuser:
create extension file_fdw; create server my_csv foreign data wrapper file_fdw; create foreign table my_csv ( x1 integer, x2 text, x3 text ) server my_csv options (filename '/tmp/my_csv.csv', format 'csv' ) ;
Grant select permission on the table to the user who will read it:
grant select on table my_csv to the_read_user;
Then whenever necessary read directly from the csv file as if it were a table:
insert into my_table (x2) select x2 from my_csv where x1 = 2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With