PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kopieren Sie einige Spalten einer CSV-Datei in eine Tabelle

Wenn es sich um eine Ad-hoc-Aufgabe handelt

Erstellen Sie eine temporäre Tabelle mit allen Spalten in der Eingabedatei

create temporary table t (x1 integer, ... , x10 text)

Kopieren Sie aus der Datei hinein:

copy t (x1, ... , x10)
from '/path/to/my_file'
with (format csv)

Fügen Sie nun in die endgültige Tabelle aus dem Temp ein:

insert into my_table (x2, x5, x7, x10)
select x2, x5, x7, x10
from t

Und lass es fallen:

drop table t

Wenn es sich um eine häufige Aufgabe handelt

Verwenden Sie den file_fdw Verlängerung. Als 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' )
;

Gewähren Sie dem Benutzer, der sie lesen wird, eine Auswahlberechtigung für die Tabelle:

grant select on table my_csv to the_read_user;

Lesen Sie dann bei Bedarf direkt aus der csv-Datei, als wäre es eine Tabelle:

insert into my_table (x2)
select x2
from my_csv
where x1 = 2