ฉันจะคัดลอกจากไฟล์ภายในเครื่องไปยังฐานข้อมูลระยะไกลใน PostgreSQL ได้อย่างไร [ปิด]


9

ฉันเป็นสามเณรใน psql และต้องการความช่วยเหลือ ฉันจะโหลด CSV ท้องถิ่นไปยังฐานข้อมูลระยะไกลได้อย่างไร

ฉันใช้คำสั่งต่อไปนี้

\COPY test(user_id, product_id, value) 
      FROM '/Users/testuser/test.tsv' WITH DELIMITER '\t' CSV HEADER;

แต่สิ่งนี้จะค้นหาไฟล์บนฐานข้อมูลระยะไกลในขณะที่ฉันต้องทำบนพีซีในพื้นที่ของฉัน


4
\copyอ่านไฟล์โลคัล (เป็นpsqlคำสั่งและสามารถใช้ได้จากภายในpsqlเท่านั้น) COPYอย่างไรก็ตาม (หมายเหตุ `` `` หายไป) จะอ่านไฟล์บนเซิร์ฟเวอร์
a_horse_with_no_name

ดังนั้นจึงไม่มีวิธีนี้ ฉันต้องการคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ระยะไกลหรือไม่?
22149

มีความแตกต่างในการคัดลอกและ \ คัดลอก? ขอโทษฉันใหม่จริง ๆ ใน psql รู้ oracle ที่นั่นฉันสามารถทำสิ่งนี้ได้โดยไม่มีปัญหาใด ๆ
user22149

ความแตกต่างก็คือไฟล์หนึ่งอ่านไฟล์บนเซิร์ฟเวอร์และอีกอันอ่านไฟล์บนไคลเอนต์ เห็นได้ชัดว่าการอ่านไฟล์บนเซิร์ฟเวอร์จะเร็วขึ้น
a_horse_with_no_name

1
@ user22149 E'\t'ใช้ตัวอักษรหรือแท็บ แต่แท็บควรเป็นค่าเริ่มต้นหากคุณไม่ได้ระบุ delim อยู่ดี
Craig Ringer

คำตอบ:


5

มีความเป็นไปได้สองอย่างที่นี่

  1. หากคุณใช้ psql \ copy เป็นวิธีที่ถูกต้องในการทำสิ่งต่าง ๆ ตามที่คุณพูดถึง

  2. หากคุณใช้โปรแกรมไคลเอนต์ที่คุณเขียนคุณต้อง

    COPY FROM STDIN.....

และแล้วฟีดไฟล์ใน (ดูเอกสารเกี่ยวกับคำสั่งคัดลอก

คำสั่ง COPY เป็นสัตว์ร้ายที่แปลกเล็กน้อย มันเป็นคำสั่งเดียวที่ PostgreSQL ปัจจุบันรองรับจาก Quel ดังนั้นจึงเป็นทั้งแบบที่ไม่ได้มาตรฐานและยึดตามกระบวนทัศน์ที่แตกต่างจากคำสั่งอื่น ๆ ด้วยเหตุนี้จึงเป็นเรื่องสำคัญที่จะต้องอ่านเอกสารอย่างระมัดระวังในคำสั่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.