จะนำเข้าข้อมูลไฟล์ CSV ลงในตาราง PostgreSQL ได้อย่างไร


601

ฉันจะเขียนขั้นตอนการจัดเก็บที่นำเข้าข้อมูลจากไฟล์ CSV และเติมข้อมูลในตารางได้อย่างไร


18
ทำไมขั้นตอนการจัดเก็บ? COPY ทำเคล็ดลับ
Frank Heikens

1
ฉันมีส่วนต่อประสานผู้ใช้ที่อัปโหลดไฟล์ csv เพื่อขอสิ่งนี้ฉันต้องการขั้นตอนการจัดเก็บที่จริง ๆ แล้วคัดลอกข้อมูลจากไฟล์ cvs
vardhan

3
คุณอธิบายรายละเอียดเกี่ยวกับวิธีใช้ COPY ได้อย่างไร
vardhan

17
Bozhidar Batsov ได้มอบลิงก์ไปยังตัวอย่างให้กับคุณแล้วคู่มือที่ละเอียดอาจช่วยคุณได้เช่น: postgresql.org/docs/8.4/interactive/sql-copy.html
Frank Heikens

5
คู่มือปัจจุบัน: postgresql.org/docs/current/static/sql-copy.html
Basil Bourque

คำตอบ:


774

ลองดูที่นี้บทความสั้น


โซลูชันถอดความได้ที่นี่:

สร้างตารางของคุณ:

CREATE TABLE zip_codes 
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision, 
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);

คัดลอกข้อมูลจากไฟล์ CSV ของคุณไปยังตาราง:

COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' WITH (FORMAT csv);

46
จริง ๆ แล้วใช้ \ copy จะทำแบบเดียวกันถ้าคุณไม่มีการเข้าถึงแบบผู้ใช้ขั้นสูง มันร้องเรียนกับ Fedora 16 ของฉันเมื่อใช้ COPY กับบัญชีที่ไม่ใช่รูท
Askw0rder

81
เคล็ดลับ: คุณสามารถระบุว่าคุณมีคอลัมน์ใดใน CSV โดยใช้ zip_codes (col1, col2, col3) คอลัมน์จะต้องแสดงรายการตามลำดับเดียวกับที่ปรากฏในไฟล์
David Pelaez

6
@ Askw0rder \ copy มีไวยากรณ์เหมือนกันหรือไม่ bcoz ฉันได้รับข้อผิดพลาดทางไวยากรณ์กับ \ copy
JhovaniC

6
ฉันควรรวมแถวส่วนหัวหรือไม่
bernie2436

116
คุณสามารถรวมแถวส่วนหัว - เพียงเพิ่ม HEADER ในตัวเลือก: COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV HEADER; postgresql.org/docs/9.1/static/sql-copy.html
Barrett Clark

221

หากคุณไม่ได้รับอนุญาตให้ใช้COPY(ซึ่งทำงานบนเซิร์ฟเวอร์ db) คุณสามารถใช้\copyแทน (ซึ่งใช้งานได้ในไคลเอนต์ db) ใช้ตัวอย่างเดียวกันกับ Bozhidar Batsov:

สร้างตารางของคุณ:

CREATE TABLE zip_codes 
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision, 
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);

คัดลอกข้อมูลจากไฟล์ CSV ของคุณไปยังตาราง:

\copy zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV

คุณยังสามารถระบุคอลัมน์ที่จะอ่าน:

\copy zip_codes(ZIP,CITY,STATE) FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV

ดูเอกสารประกอบสำหรับการคัดลอก :

อย่าสับสน COPY กับคำสั่ง psql \ copy \ copy เรียกใช้คัดลอกจาก STDIN หรือคัดลอกไปยัง STDOUT แล้วดึง / เก็บข้อมูลในไฟล์ที่เข้าถึงได้โดยไคลเอนต์ psql ดังนั้นความสามารถในการเข้าถึงไฟล์และสิทธิ์การเข้าถึงจึงขึ้นอยู่กับไคลเอ็นต์มากกว่าเซิร์ฟเวอร์เมื่อใช้ \ copy

และหมายเหตุ:

สำหรับคอลัมน์ข้อมูลประจำตัวคำสั่ง COPY FROM จะเขียนค่าคอลัมน์ที่ระบุในข้อมูลอินพุตเช่นตัวเลือก INSERT OVERRIDING SYSTEM VALUE


\ คัดลอกผู้ลงคะแนน (ZIP, CITY) จาก '/Users/files/Downloads/WOOD.TXT' DELIMITER ',' CSV HEADER; ข้อผิดพลาด: ข้อมูลเพิ่มเติมหลังจากคอลัมน์ที่คาดไว้ล่าสุดบริบท: ผู้มีสิทธิเลือกตั้งคัดลอกบรรทัดที่ 2: "OH0012781511,87,26953, ครัวเรือน, เชอร์รี่, LEIGH ,, 11/26 / 1965,08 / 19/1988,, 211 N GARFIELD ST, BLOOMD ... "
JZ

@JZ ฉันมีข้อผิดพลาดที่คล้ายกัน เป็นเพราะฉันมีคอลัมน์ว่างเปล่าเป็นพิเศษ ตรวจสอบ csv ของคุณและถ้าคุณมีคอลัมน์ว่างนั่นอาจเป็นเหตุผล
alex เบนเน็ตต์

5
นี่เป็นสิ่งที่ทำให้เข้าใจผิด: ความแตกต่างระหว่างCOPYและ\copyเกินกว่าสิทธิ์เท่านั้นและคุณไม่สามารถเพิ่ม `` เพื่อทำให้มันใช้งานได้อย่างน่าอัศจรรย์ ดูคำอธิบาย (ในบริบทของการส่งออก) ที่นี่: stackoverflow.com/a/1517692/157957
IMSoP

@IMSoP: คุณพูดถูกฉันได้กล่าวถึงเซิร์ฟเวอร์และไคลเอนต์เพื่อชี้แจง
bjelli

@bjelli \ copy ช้ากว่าการคัดลอก? ฉันมีไฟล์ 1.5MB และอินสแตนซ์ db.m4.large บน RDS และเป็นเวลาหลายชั่วโมงที่คำสั่ง copy นี้ทำงาน (อย่างน้อย 3)
เซบาสเตียน

79

วิธีการหนึ่งในการทำเช่นนี้คือไลบรารี Python pandas (เวอร์ชั่น 0.15 ขึ้นไปทำงานได้ดีที่สุด) สิ่งนี้จะจัดการกับการสร้างคอลัมน์สำหรับคุณ - แม้ว่าจะเห็นได้ชัดว่าตัวเลือกสำหรับประเภทข้อมูลอาจไม่ใช่สิ่งที่คุณต้องการ ถ้ามันไม่ได้ทำสิ่งที่คุณต้องการคุณสามารถใช้รหัส 'สร้างตาราง' ที่สร้างขึ้นเป็นเทมเพลต

นี่คือตัวอย่างง่ายๆ:

import pandas as pd
df = pd.read_csv('mypath.csv')
df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces

from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/dbname')

df.to_sql("my_table_name", engine)

และนี่คือรหัสบางส่วนที่แสดงวิธีตั้งค่าตัวเลือกต่าง ๆ :

# Set it so the raw sql output is logged
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)

df.to_sql("my_table_name2", 
          engine, 
          if_exists="append",  #options are ‘fail’, ‘replace’, ‘append’, default ‘fail’
          index=False, #Do not output the index of the dataframe
          dtype={'col1': sqlalchemy.types.NUMERIC,
                 'col2': sqlalchemy.types.String}) #Datatypes should be [sqlalchemy types][1]

6
นอกจากนี้if_existsพารามิเตอร์สามารถตั้งค่าให้แทนที่หรือผนวกเข้ากับตารางที่มีอยู่เช่นdf.to_sql("fhrs", engine, if_exists='replace')
joelostblom

1
ชื่อผู้ใช้และรหัสผ่าน: จำเป็นต้องสร้างการเข้าสู่ระบบและกำหนดฐานข้อมูลให้กับผู้ใช้ หากใช้ pgAdmin ให้สร้าง "บทบาทการเข้าสู่ระบบ / กลุ่ม" โดยใช้ GUI
Somnath Kadam

9
Pandas เป็นวิธีที่ช้ามากในการโหลดไปยัง sql (ไฟล์ vs csv) สามารถเป็นคำสั่งของขนาดช้าลง
user48956

นี่อาจเป็นวิธีการเขียนข้อมูล แต่มันช้าสุด ๆ แม้จะมีแบทช์และพลังการประมวลผลที่ดี การใช้ CSV เป็นวิธีที่ดีในการทำสิ่งนี้ให้สำเร็จ
Ankit Singh

df.to_sql()ช้ามากคุณสามารถใช้d6tstack.utils.pd_to_psql()จากd6tstackดูการเปรียบเทียบประสิทธิภาพ
citynorman

30

คุณยังสามารถใช้ pgAdmin ซึ่งมี GUI เพื่อดำเนินการนำเข้า ที่แสดงในเธรด SOนี้ ข้อดีของการใช้ pgAdmin ก็คือมันสามารถใช้ได้กับฐานข้อมูลระยะไกล

เหมือนโซลูชันก่อนหน้านี้ แต่คุณจะต้องมีตารางของคุณในฐานข้อมูลแล้ว แต่ละคนมีวิธีการแก้ปัญหาของตัวเอง แต่สิ่งที่ฉันมักจะทำคือเปิด CSV ใน Excel คัดลอกส่วนหัววางแบบพิเศษด้วยการโยกย้ายบนแผ่นงานที่แตกต่างกันวางประเภทข้อมูลที่สอดคล้องกันในคอลัมน์ถัดไปจากนั้นเพียงคัดลอกและวางลงในโปรแกรมแก้ไขข้อความ ร่วมกับแบบสอบถามสร้างตาราง SQL ที่เหมาะสมเช่น:

CREATE TABLE my_table (
    /*paste data from Excel here for example ... */
    col_1 bigint,
    col_2 bigint,
    /* ... */
    col_n bigint 
)

1
กรุณาแสดงตัวอย่างแถวของข้อมูลที่คุณวาง
dcorking

29

โซลูชันอื่น ๆ ส่วนใหญ่ที่นี่ต้องการให้คุณสร้างตารางล่วงหน้า / ด้วยตนเอง สิ่งนี้อาจไม่สามารถใช้ได้ในบางกรณี (เช่นหากคุณมีคอลัมน์จำนวนมากในตารางปลายทาง) ดังนั้นวิธีการด้านล่างอาจมีประโยชน์

การระบุจำนวนพา ธ และคอลัมน์ของไฟล์ csv ของคุณคุณสามารถใช้ฟังก์ชันต่อไปนี้เพื่อโหลดตารางของคุณไปยังตาราง temp ที่จะตั้งชื่อเป็นtarget_table:

แถวบนจะถือว่ามีชื่อคอลัมน์

create or replace function data.load_csv_file
(
    target_table text,
    csv_path text,
    col_count integer
)

returns void as $$

declare

iter integer; -- dummy integer to iterate columns with
col text; -- variable to keep the column name at each iteration
col_first text; -- first column name, e.g., top left corner on a csv file or spreadsheet

begin
    create table temp_table ();

    -- add just enough number of columns
    for iter in 1..col_count
    loop
        execute format('alter table temp_table add column col_%s text;', iter);
    end loop;

    -- copy the data from csv file
    execute format('copy temp_table from %L with delimiter '','' quote ''"'' csv ', csv_path);

    iter := 1;
    col_first := (select col_1 from temp_table limit 1);

    -- update the column names based on the first row which has the column names
    for col in execute format('select unnest(string_to_array(trim(temp_table::text, ''()''), '','')) from temp_table where col_1 = %L', col_first)
    loop
        execute format('alter table temp_table rename column col_%s to %s', iter, col);
        iter := iter + 1;
    end loop;

    -- delete the columns row
    execute format('delete from temp_table where %s = %L', col_first, col_first);

    -- change the temp table name to the name given as parameter, if not blank
    if length(target_table) > 0 then
        execute format('alter table temp_table rename to %I', target_table);
    end if;

end;

$$ language plpgsql;

1
สวัสดีเมห์เม็ตขอบคุณสำหรับคำตอบที่คุณโพสต์ แต่เมื่อฉันเรียกใช้รหัสของคุณฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: ข้อผิดพลาด: schema "data" ไม่มีอยู่
user2867432

user2867432 คุณจำเป็นต้องเปลี่ยนแปลงชื่อสกีที่คุณใช้ตามความเหมาะสม (เช่นpublic)
mehmet

สวัสดีเมห์เม็ตขอบคุณสำหรับวิธีแก้ปัญหามันสมบูรณ์แบบ แต่ใช้ได้เฉพาะในกรณีที่ผู้ใช้ postgres DB เป็น superuser มีวิธีใดที่จะทำให้ใช้งานได้โดยไม่ต้องใช้ superuser?
Geeme

Geeme: อ่าน "security definer" ที่นี่แต่ฉันไม่ได้ใช้ด้วยตัวเอง
เมห์เม็ต

คำตอบที่สวยงาม! ฉันจะไม่เป็นคนสามัญเกินไปแม้ว่าในรหัสของฉันสำหรับการอ่านสำหรับผู้อื่น
Manohar Reddy Poreddy

19

ดังที่เปาโลกล่าวถึงการนำเข้าทำงานใน pgAdmin:

คลิกขวาที่ตาราง -> นำเข้า

เลือกไฟล์ท้องถิ่นรูปแบบและการเข้ารหัส

นี่คือภาพหน้าจอ GUI pgAdmin GUI ของเยอรมัน:

pgAdmin GUI นำเข้า

สิ่งที่คล้ายกันคุณสามารถทำกับ DbVisualizer (ฉันมีใบอนุญาตไม่แน่ใจเกี่ยวกับรุ่นฟรี)

คลิกขวาที่ตาราง -> นำเข้าข้อมูลตาราง ...

GUI นำเข้า DbVisualizer


2
DBVisualizer ใช้เวลา 50 วินาทีในการนำเข้า 1,400 แถวด้วยสามฟิลด์ - และฉันต้องโยนทุกอย่างกลับจาก String ไปยังทุกอย่างที่มันควรจะเป็น
Noumenon


10
  1. สร้างตารางก่อน

  2. จากนั้นใช้คำสั่ง copy เพื่อคัดลอกรายละเอียดตาราง:

คัดลอก table_name (C1, C2, C3 .... )
จาก 'เส้นทางไปยังไฟล์ csv ของคุณ' ตัวคั่น ',' ส่วนหัว csv;

ขอบคุณ


3
นี่ไม่ใช่คำตอบที่ยอมรับได้อย่างไร ทำไมฉันถึงเขียนสคริปต์ไพ ธ อนเมื่อฐานข้อมูลมีคำสั่งให้ทำแล้ว?
Wes


8

ประสบการณ์ส่วนตัวกับ PostgreSQL ยังคงรอวิธีที่รวดเร็วกว่า

1. สร้างโครงกระดูกของตารางก่อนหากไฟล์ถูกเก็บไว้ในเครื่อง:

    drop table if exists ur_table;
    CREATE TABLE ur_table
    (
        id serial NOT NULL,
        log_id numeric, 
        proc_code numeric,
        date timestamp,
        qty int,
        name varchar,
        price money
    );
    COPY 
        ur_table(id, log_id, proc_code, date, qty, name, price)
    FROM '\path\xxx.csv' DELIMITER ',' CSV HEADER;

2. เมื่อ \ path \ xxx.csv อยู่บนเซิร์ฟเวอร์ postgreSQL ไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์คุณจะต้องนำเข้าไฟล์. csv ผ่าน pgAdmin ที่มีอยู่ในฟังก์ชัน

คลิกขวาที่ชื่อตารางเลือกนำเข้า

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณยังคงมีปัญหาโปรดอ้างอิงบทช่วยสอนนี้ http://www.postgresqltutorial.com/import-csv-file-into-posgresql-table/


6

จะนำเข้าข้อมูลไฟล์ CSV ลงในตาราง PostgreSQL ได้อย่างไร

ขั้นตอน

  1. จำเป็นต้องเชื่อมต่อฐานข้อมูล postgresql ในเทอร์มินัล

    psql -U postgres -h localhost
  2. จำเป็นต้องสร้างฐานข้อมูล

    create database mydb;
  3. จำเป็นต้องสร้างผู้ใช้

    create user siva with password 'mypass';
  4. เชื่อมต่อกับฐานข้อมูล

    \c mydb;
  5. จำเป็นต้องสร้างสคีมา

    create schema trip;
  6. จำเป็นต้องสร้างตาราง

    create table trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount
    );
  7. นำเข้าข้อมูลไฟล์ csv ไปที่ postgresql

    COPY trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount) FROM '/home/Documents/trip.csv' DELIMITER ',' CSV HEADER;
  8. ค้นหาข้อมูลตารางที่กำหนด

    select * from trip.test;

5

IMHO วิธีที่สะดวกที่สุดคือปฏิบัติตาม " นำเข้าข้อมูล CSV ลงใน postgresql วิธีที่สะดวกสบาย ;-) " โดยใช้csvsqlจากcsvkitซึ่งเป็นแพคเกจหลามที่สามารถติดตั้งผ่าน pip


3
การเชื่อมโยงเน่าเป็นโลภ! บทความที่คุณเชื่อมโยงกับใช้งานไม่ได้อีกต่อไปซึ่งทำให้ฉันรู้สึกไม่สบายใจ :(
chbrown

คุณอาจต้องการพูดถึงว่าเขาเป็นปิ
เขา

1
สำหรับฉันฉันได้รับ MemoryError หากพยายามนำเข้า CSV ขนาดใหญ่ดังนั้นดูเหมือนว่าจะไม่สตรีม
DavidC

@DavidC น่าสนใจ ไฟล์ของคุณใหญ่แค่ไหน? คุณมีหน่วยความจำเท่าไหร่ ถ้ามันไม่ได้กระแสตามที่ปรากฏผมขอแนะนำให้ chunking ข้อมูลก่อนที่จะแทรก
สาละ

1
ไฟล์มีขนาด 5GB และฉันมีหน่วยความจำ 2GB ฉันยอมแพ้และใช้สคริปต์เพื่อสร้างคำสั่ง CREATE TABLE และ COPY ในที่สุด
DavidC

3

ใน Python คุณสามารถใช้รหัสนี้สำหรับการสร้างตาราง PostgreSQL อัตโนมัติด้วยชื่อคอลัมน์:

import pandas, csv

from io import StringIO
from sqlalchemy import create_engine

def psql_insert_copy(table, conn, keys, data_iter):
    dbapi_conn = conn.connection
    with dbapi_conn.cursor() as cur:
        s_buf = StringIO()
        writer = csv.writer(s_buf)
        writer.writerows(data_iter)
        s_buf.seek(0)
        columns = ', '.join('"{}"'.format(k) for k in keys)
        if table.schema:
            table_name = '{}.{}'.format(table.schema, table.name)
        else:
            table_name = table.name
        sql = 'COPY {} ({}) FROM STDIN WITH CSV'.format(table_name, columns)
        cur.copy_expert(sql=sql, file=s_buf)

engine = create_engine('postgresql://user:password@localhost:5432/my_db')

df = pandas.read_csv("my.csv")
df.to_sql('my_table', engine, schema='my_schema', method=psql_insert_copy)

มันค่อนข้างเร็วฉันสามารถนำเข้ามากกว่า 3.3 ล้านแถวในเวลาประมาณ 4 นาที


2

นอกจากนี้คุณยังสามารถใช้pgfutterหรือดียิ่งขึ้นpgcsv

pgfutter ค่อนข้างบั๊กนี่ฉันขอแนะนำ pgcsv อีกครั้ง

นี่คือวิธีการทำกับ pgcsv:

sudo pip install pgcsv
pgcsv --db 'postgresql://localhost/postgres?user=postgres&password=...' my_table my_file.csv

1

หากคุณต้องการกลไกอย่างง่ายในการนำเข้าจาก text / parse multiline CSV คุณสามารถใช้:

CREATE TABLE t   -- OR INSERT INTO tab(col_names)
AS
SELECT
   t.f[1] AS col1
  ,t.f[2]::int AS col2
  ,t.f[3]::date AS col3
  ,t.f[4] AS col4
FROM (
  SELECT regexp_split_to_array(l, ',') AS f
  FROM regexp_split_to_table(
$$a,1,2016-01-01,bbb
c,2,2018-01-01,ddd
e,3,2019-01-01,eee$$, '\n') AS l) t;

การสาธิต DBFiddle


1

DBeaver Community Edition (dbeaver.io) ทำให้เชื่อมต่อกับฐานข้อมูลได้ง่ายจากนั้นนำเข้าไฟล์ CSV เพื่ออัปโหลดไปยังฐานข้อมูล PostgreSQL นอกจากนี้ยังทำให้ง่ายต่อการออกแบบสอบถามเรียกข้อมูลและชุดผลลัพธ์การดาวน์โหลดเป็น CSV, JSON, SQL หรือรูปแบบข้อมูลทั่วไปอื่น ๆ

มันเป็นเครื่องมือฐานข้อมูลแบบหลายแพลตฟอร์ม FOSS สำหรับโปรแกรมเมอร์ SQL, DBAs และนักวิเคราะห์ที่สนับสนุนฐานข้อมูลยอดนิยมทั้งหมด: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Hive, Presto ฯลฯ มันเป็นคู่แข่ง FOSS ที่ทำงานได้เพื่อ TOAD สำหรับ Postgres, TOAD สำหรับ SQL Server หรือ Toad สำหรับ Oracle

ฉันไม่มีส่วนเกี่ยวข้องกับ DBeaver ฉันชอบราคา (ฟรี!) และฟังก์ชั่นเต็มรูปแบบ แต่ฉันหวังว่าพวกเขาจะเปิดแอปพลิเคชัน DBeaver / Eclipse นี้ให้มากขึ้นและทำให้ง่ายต่อการเพิ่มวิดเจ็ตการวิเคราะห์ลงใน DBeaver / Eclipse แทนที่จะต้องการให้ผู้ใช้จ่ายเงิน เพื่อสร้างกราฟและแผนภูมิโดยตรงภายในแอปพลิเคชัน ทักษะการเขียนโค้ด Java ของฉันมีสนิมและฉันไม่รู้สึกอยากใช้เวลาหลายสัปดาห์เพื่อเรียนรู้วิธีสร้างวิดเจ็ต Eclipse (เฉพาะเมื่อพบว่า DBeaver อาจปิดการใช้งานความสามารถในการเพิ่มวิดเจ็ตของบุคคลที่สามใน DBeaver Community Edition)

ผู้ใช้ DBeaver ที่เป็นผู้พัฒนา Java สามารถให้ข้อมูลเชิงลึกเกี่ยวกับขั้นตอนในการสร้างวิดเจ็ตการวิเคราะห์เพื่อเพิ่มลงใน Community Edition ของ DBeaver หรือไม่


คงจะดีที่ได้เข้าใจวิธีใช้ DBeaver เพื่อนำเข้าไฟล์ CSV อย่างไรก็ตามสิ่งนี้อาจช่วยได้: dbeaver.com/docs/wiki/Data-transfer
umbe1987

0

สร้างตารางและมีคอลัมน์ที่จำเป็นที่ใช้สำหรับการสร้างตารางในไฟล์ csv

  1. เปิด postgres และคลิกขวาที่ตารางเป้าหมายที่คุณต้องการในการโหลดและเลือกการนำเข้าและการปรับปรุงขั้นตอนต่อไปนี้ในตัวเลือกไฟล์ส่วน

  2. เรียกดูไฟล์ของคุณในชื่อไฟล์

  3. เลือก csv ในรูปแบบ

  4. เข้ารหัสเป็น ISO_8859_5

ตอนนี้ไปที่อื่น ๆ ตัวเลือกและตรวจสอบส่วนหัวและคลิกที่นำเข้า


0

ฉันสร้างเครื่องมือขนาดเล็กที่นำเข้าcsvไฟล์ลงใน PostgreSQL ง่ายสุด ๆ เพียงแค่คำสั่งและมันจะสร้างและเติมข้อมูลในตารางโชคไม่ดีในขณะนี้ทุกเขตข้อมูลที่สร้างขึ้นโดยอัตโนมัติใช้ประเภท TEXT

csv2pg users.csv -d ";" -H 192.168.99.100 -U postgres -B mydatabase

เครื่องมือสามารถพบได้ที่https://github.com/eduardonunesp/csv2pg


คุณทำเครื่องมือแยกต่างหากสำหรับเทียบเท่าpsql -h 192.168.99.100 -U postgres mydatabase -c "COPY users FROM 'users.csv' DELIMITER ';' CSV"? ฉันเดาว่าส่วนที่สร้างตารางดี แต่เนื่องจากทุกฟิลด์เป็นข้อความจึงไม่มีประโยชน์มากนัก
GammaGames

1
Ops ขอบคุณสำหรับหัวขึ้น ใช่ฉันทำได้ดีใช้เวลาเพียงไม่กี่ชั่วโมงและฉันได้เรียนรู้สิ่งดีๆใน Go และ pq และ API ฐานข้อมูลใน Go
Eduardo Pereira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.