วิธีดำเนินการค้นหาจาก psql โดยไม่รอผลลัพธ์


9

ข้อความค้นหาของฉัน (เพื่อสร้างตารางใหม่จากตารางที่มีอยู่) ใช้เวลานานมาก ดังนั้นฉันจึงตั้งค่าฐานข้อมูลระยะไกลในสำนักงานของฉัน - มี RAM เพิ่มเติม

ฉันสามารถเชื่อมต่อกับฐานข้อมูลจากที่บ้านได้ตามปกติด้วย psql

ฉันจะบอกเซิร์ฟเวอร์ระยะไกลให้ดำเนินการค้นหาจากเทอร์มินัลโดยไม่ต้องรอการตอบกลับได้อย่างไร

(postgresql-9.2, สิ่งแวดล้อม linux)

แก้ไข: ฉันเปิดให้โซลูชั่นอื่น ๆ ไม่จำเป็นต้องใช้ psql

คำตอบ:


6

เนื่องจากคุณระบุว่าคุณจะเปิดให้แก้ปัญหาอื่น ๆ ผมอาจจะแนะนำให้ดูที่ multiplexers ขั้วเช่นหน้าจอหรือtmux ในความคิดของฉัน tmux เป็นตัวเลือกที่ดีกว่าเนื่องจากชื่อที่ไม่ซ้ำกัน (ง่ายกว่าที่จะได้รับความนิยมที่เกี่ยวข้องในเครื่องมือค้นหา)

โดยพื้นฐานแล้วซอฟต์แวร์ประเภทนี้จะช่วยให้คุณสามารถแยกออกจากเชลล์และดำเนินการเซสชันต่อในภายหลัง


1
ไม่tmuxทำงานด้วยวิธีนี้ว่าฉันจะสามารถที่จะปิดเครื่องท้องถิ่นของฉันและแบบสอบถามยังคงได้รับ proccessed ที่เซิร์ฟเวอร์ระยะไกล '?
dezso

ใช่เซสชันกำลังทำงานบนเครื่องระยะไกล - ปัญหาไฟฟ้าดับหรือการขาดการเชื่อมต่ออินเทอร์เน็ตเป็นปัญหา (ในส่วนของเซสชันระยะไกล :)) โปรดทราบว่าคุณต้องเริ่มต้นกระบวนการจากภายในเครื่อง multiplexer (afaik)
c0dem4gnetic

คุณสามารถให้แนวทางเกี่ยวกับวิธีการใช้งานได้หรือไม่ psqlเป็น thats ไคลเอ็นต์ซอฟต์แวร์ที่ทำงานบนเครื่องของคุณแล้วtmuxจะทำให้sshการเชื่อมต่อกับเครื่องระยะไกลทำงานเซิร์ฟเวอร์ postgres? หากเป็นกรณีที่ฉันเศร้าที่รู้ว่าสิ่งนี้จะไม่ทำงานกับอินสแตนซ์ Redshift โดยไม่ต้องใช้ EC2 เช่นกัน
เมอร์ลิน

@Merlin tmux รันบนเครื่องรีโมตและสร้างเชลล์เซสชัน มันมาจากสิ่งที่คุณถอดออกและแนบ เมื่อรัน psql แบบโลคัลคุณสามารถรันในเซสชัน tmux แต่การเชื่อมต่อไคลเอ็นต์จะถูกเก็บไว้ตราบเท่าที่เงื่อนไขเครือข่ายอนุญาต - เช่นเดียวกับเซสชัน ssh ปกติ
c0dem4gnetic

@ c0dem4gnetic ฉันคิดว่า psql จะต้องติดตั้งบนเซิร์ฟเวอร์ระยะไกล ดูเหมือนว่า local tmux -> EC2 + tmux + psql กำลังล็อกอินเข้าสู่ redshift / postgres db เพื่อให้เซสชันยังมีชีวิตอยู่
เมอร์ลิน

8

คุณสามารถลองส่งpsqlไปที่พื้นหลัง:

psql -f your_sql_file.sql &

หรือเชื่อมต่อกับฐานข้อมูลท้องถิ่นคุณสามารถใช้dblinkเพื่อส่งแบบสอบถามไปยังฐานข้อมูลระยะไกล:

SELECT dblink_connect('your_connection_name', 'your_connection_string');
SELECT dblink_send_query('your_connection_name', 'your_query');

โปรดทราบว่าdblink_send_queryสามารถส่งแบบสอบถามได้ครั้งละหนึ่งแบบสอบถามเท่านั้น ดังนั้นหากคุณต้องการรันคำสั่ง SQL หลายคำสั่งนี่ไม่ใช่โซลูชันของคุณ

หรือคุณสามารถเริ่มpg_agentงานบนเซิร์ฟเวอร์ระยะไกลซึ่งไม่ต้องการการแทรกแซงด้วยตนเองดังนั้นสถานะของกล่องภายในบ้านของคุณจึงไม่มีผลต่อการทำงานของคุณ สามารถทำได้โดยการตั้งค่าcron(หรือดียิ่งขึ้นat- ขอบคุณเออร์วิน) ที่ดำเนินงานสคริปต์ของคุณ

นอกจากนี้หากคุณมีงานที่ใช้เวลานานซึ่งคุณเริ่มด้วยตนเองคุณสามารถเริ่มscreenเซสชันบนเซิร์ฟเวอร์และเรียกใช้ไฟล์จากที่นั่น ในกรณีนี้คุณสามารถออกจากระบบและกลับบ้านได้และสคริปต์จะยังคงทำงานต่อไป


pg_agent ดูมีแนวโน้มมากพอ ฉันจะลองและอัปเดตผลลัพธ์
user528025

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