การใช้งานสำเนาจาก STDIN ในภายหลัง


14

ฉันเพิ่งเริ่มใช้ Postgres และฉันพยายามสร้างตัวอย่างฐานข้อมูลเพื่อทำความเข้าใจการทำงานของมันมองไปรอบ ๆ ฉันพบสคริปต์บางอย่างใน pgfoundry.org ฉันเข้าใจคำสั่งเนื่องจากก่อนหน้านี้ฉันเคยใช้ทั้ง Oracle และ MS-SQL แต่สคริปต์ทั้งหมดที่ฉันใช้กำลังส่งคืนข้อผิดพลาดเมื่อถึงคำสั่ง "COPY FROM" แม่นยำมากขึ้นข้อผิดพลาดจะถูกโยนที่องค์ประกอบแรกที่ควรจะแทรกในตารางที่กำหนด

ฉันพยายามเรียกใช้สคริปต์ทั้งในฐานะข้อความค้นหาและเป็น pgScripts แต่ทั้งสองวิธีฉันได้รับข้อผิดพลาดในแถวแรกหลังจากคัดลอกจาก

ฉันใช้ pgAdminIII และฉันใช้ StackBuilder เพื่อติดตั้ง PostgreSQL 9.2.4.1 เป็นไดร์เวอร์ฐานข้อมูล ฉันอาจขาดการกำหนดค่าพื้นฐานบางอย่างที่ทำให้ฉันไม่สามารถเรียกใช้คำสั่งนี้ได้หรือฉันไม่เข้าใจว่ามันใช้งานได้หรือไม่?

แก้ไข:
ข้อผิดพลาดคือ:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

ที่ข้อความคือ:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`

1
ยินดีต้อนรับสู่ dba.SE คุณต้องรวม messsage ข้อผิดพลาด (คำต่อคำ) กับคำถามเช่นนั้น หากสถานที่ของคุณไม่ใช่ภาษาอังกฤษคุณสามารถรีเซ็ตได้ในเซสชั่นของคุณก่อนที่คุณจะเรียกใช้สคริปต์เพื่อรับข้อความแสดงข้อผิดพลาดภาษาอังกฤษเริ่มต้น: SET lc_messages = Cเพียงแค่เรียกใช้ในหน้าต่างแก้ไข SQL ของคุณซึ่ง "ประกอบด้วย" เซสชั่น
Erwin Brandstetter

ขอบคุณฉันกำลังพยายามหาวิธีเปลี่ยนภาษาของฉันฉันจะรวมข้อความข้อผิดพลาดทันทีที่ฉันรู้วิธีการทำเช่นนั้น
Eugenio Laghi

1
โอ้ฉันลืมคำพูดเดียว: SET lc_messages = 'C'.
Erwin Brandstetter

คำตอบ:


10

pgScript เป็นส่วนขยายสคริปต์ท้องถิ่นของ pgAdmin ซึ่งส่วนใหญ่คุณอาจไม่ต้องการที่นี่

pgAdmin เป็น GUI ไม่ใช่แอปพลิเคชันคอนโซล - ไม่มีstdinสิ่งใดที่คุณสามารถใช้ได้อย่างง่ายดาย หากคุณต้องการstdinที่จะสตรีมเนื้อหาที่ใช้ psql ของคุณซึ่งเป็นโปรแกรมประยุกต์คอนโซล - กับ\copyเมตาคำสั่งของ psql

หากคุณมีไฟล์ (ซึ่งคุณเห็นได้ชัด) ให้ใช้ SQL COPYจาก pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

ไฟล์ต้องอ่านได้โดยpostgresผู้ใช้ระบบ

ข้อมูลเพิ่มเติมในเรื่องนี้ คำขอที่เกี่ยวข้องอย่างใกล้ชิดกับการสนับสนุนรายการ pgAdmin


ตกลงคุณหมายถึงฉันควรจะเรียกใช้สคริปต์ที่มีเส้นเช่น: psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql? นอกจากนี้ฉันเพิ่งลองทุกอย่างในพื้นที่ฉันเพิ่งติดตั้ง pgAdmin บนแล็ปท็อปของฉัน
Eugenio Laghi

1
@EugenioLaghi: ไม่แน่นอน psql -fจะรันไฟล์สคริปต์ SQL คุณดูเหมือนจะจัดการกับไฟล์ข้อมูล ฉันปรับปรุงคำตอบของฉัน
Erwin Brandstetter

ขอขอบคุณ! ตอนแรกฉันพยายามรันสคริปต์ แต่อย่างน้อยตอนนี้ฉันก็รู้วิธีคัดลอกข้อมูลจากไฟล์! เมื่อวานเย็นฉันเหนื่อยเกินกว่าจะเข้าใจ .. :)
Eugenio Laghi

ฉันจะแน่ใจได้อย่างไรว่าผู้ใช้ postgres สามารถอ่านไฟล์ได้ ฉันทำสิ่งนี้เกิดขึ้นสำหรับไฟล์ txt แม้สำหรับเดสก์ท็อปของฉัน (ซึ่งเป็นที่ตั้งของไฟล์) แต่การอนุญาตยังคงถูกปฏิเสธ

@Geo: โปรดเริ่มคำถามใหม่รวมถึงรุ่น Postgres, OS, ที่ไฟล์อยู่, คำสั่ง verbatim ที่คุณใช้และอื่น ๆ ถ้าเกี่ยวข้อง ...
Erwin Brandstetter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.