sql >> Databasteknik >  >> RDS >> PostgreSQL

Kopiera några av kolumnerna i en csv-fil till en tabell

Om det är en ad hoc-uppgift

Skapa en tillfällig tabell med alla kolumner i inmatningsfilen

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

Kopiera från filen till den:

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

Infoga nu i den definitiva tabellen från temp:

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

Och släpp det:

drop table t

Om det är en vanlig uppgift

Använd file_fdw förlängning. Som superanvändare:

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' )
;

Ge utvald behörighet på bordet till användaren som ska läsa det:

grant select on table my_csv to the_read_user;

Läs sedan när det behövs direkt från csv-filen som om det vore en tabell:

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


  1. Overheaden för #temp tabellskapande spårning

  2. Ställa in främmande nyckel med annan datatyp

  3. IS NOT NULL-testet för en post returnerar inte TRUE när variabeln är inställd

  4. Hur får jag min Java-applikation att identifiera sig för Oracle vid anslutning?