มีวิธีใดที่จะทำให้การเชื่อมต่อยังคงอยู่ใน pgAdmin โดยไม่ต้องตั้งค่าบนเซิร์ฟเวอร์


14

ฉันใช้ postgres.heroku.com เพื่อโฮสต์ฐานข้อมูลของฉัน ซึ่งหมายความว่าฉันไม่มีทางเปลี่ยนการตั้งค่าเซิร์ฟเวอร์ ดังนั้นคำตอบสำหรับคำถามนี้ไม่ได้ช่วยฉัน Heroku ไม่เต็มใจเปลี่ยนการตั้งค่าของพวกเขา (ฉันติดต่อพวกเขาไปแล้ว)

ฉันสงสัยว่าวิธีที่ดีที่สุดในการแฮ็ค PgAdmin III เพื่อให้การเชื่อมต่อยังมีชีวิตอยู่ ฉันกำลังคิดถึงสิ่งต่าง ๆ เช่นการสร้างแมโคร Autohotkey เพื่อดำเนินการส่วนติดต่อผู้ใช้โดยอัตโนมัติในขณะที่ PgAdmin อยู่ในพื้นหลังหรืออาจใช้เครื่องมือเครือข่ายบางชนิดเพื่อบังคับให้ส่งข้อความเครือข่ายในนาม PgAdmins

ฉันยังได้รับข้อเสนอ 500 $ สำหรับบางคนที่จะเปลี่ยนเป็นรหัสของ PgAmin III ผู้พัฒนา PgAdmin จะไม่แก้ไขรหัสเพียงเพราะ Heroku

ฉันควรทำอย่างไรดี? PgAdmin นั้นเหนือกว่าในหลาย ๆ อย่างมันมีข้อเสียเปรียบนี้


FYI, Heroku ไม่ใช่คนเดียวที่มีปัญหานี้ เรากำลังประสบปัญหานี้บน Linux VM ที่โฮสต์บน Azure และฉันคิดว่าปัญหานี้เกิดจากการปิดการเชื่อมต่อ TCP ของผู้ให้บริการ มันจะดีมากถ้า PgAdmin สามารถเปิดเผยตัวเลือกรักษาชีวิต
Jonas Stawski

1
ฉันเคยมีปัญหากับ pgadmin ตั้งแต่ปี 2002! pgadmin แน่นอนสามารถเข้ารหัสให้เชื่อมต่ออัตโนมัติอีกครั้งเมื่อหมดเวลาแทนที่จะทำให้คุณปิดแอปเปิดอีกครั้งและเปิดต้นไม้ทั้งหมดอีกครั้ง
Matthew Lock

คำตอบ:


18

libpq, ต้นแบบห้องสมุดลูกค้า PostgreSQL, มีkeepalivesตัวเลือกในการเปิดใช้งาน keepalives

ดูเหมือนว่า PgAdmin-III จะไม่อนุญาตให้คุณระบุพารามิเตอร์การเชื่อมต่อโดยพลการโดยตรง แต่จะมีวิธีแก้ไขเฉพาะหน้า

เมื่อคุณดูการกำหนดค่าการเชื่อมต่อใน PgAdmin-III คุณจะเห็นตัวเลือก "บริการ" นี้หมายถึงไฟล์บริการการเชื่อมต่อ หากต้องการใช้สร้าง~/.pg_service.confเนื้อหาด้วย:

[myherokudb]
user=myusername
keepalives=1
connect_timeout=20
keepalives_idle=10

และเมื่อเชื่อมต่อจาก PgAdmin-III ให้ป้อนmyherokudbในserviceฟิลด์

สิ่งนี้จะทำให้ PgAdmin-III ใช้พารามิเตอร์การเชื่อมต่อที่ระบุในไฟล์บริการรวมถึงการเปิดใช้งาน keepalives

(หากคุณใช้ Windows ไฟล์บริการอาจอยู่ในตำแหน่งอื่นดูเอกสารประกอบ)

ไม่มีตัวแปรสภาพแวดล้อมในlibpqการควบคุม keepalives ดังนั้นคุณจึงไม่สามารถตั้งค่าได้คุณจะต้องใช้ไฟล์บริการ

การเพิ่มการรองรับพารามิเตอร์การเชื่อมต่อเพิ่มเติมให้กับ PgAdmin-III หรือช่องทำเครื่องหมายในตัวเลือกการเชื่อมต่อเพื่อควบคุมพารามิเตอร์ keepalives น่าจะเป็นเรื่องเล็กน้อย ฉันสงสัยว่าเดฟเข้าใจหรือไม่ว่าคุณขอให้คุณเสนอเงินทุนเพื่อทำงาน


อัปเดต : ไฟล์บริการจะค้นหาตามตำแหน่งที่ระบุในPGSYSCONFDIRตัวแปรสภาพแวดล้อม หากไม่มีการตั้งค่าจะมีค่าเริ่มต้นเป็นตำแหน่งเฉพาะของแพลตฟอร์มซึ่งดูเหมือนว่าจะไม่ได้รับการบันทึกอย่างถูกต้องสำหรับ Windows ฉันจะส่งแพทช์เอกสาร เอกสารสำหรับ.pgpassแสดงเส้นทางของมันเป็นเช่น%APPDATA%\postgresql\pgpass.confนั้น~/.pg_service.confควรจะเป็น%APPDATA%\postgresql\pg_service.conf... แต่ดูเหมือนจะไม่เป็นเช่นนั้น

ในความเป็นจริงเส้นทางที่ถูกต้องคือ:

%APPDATA%\postgresql\.pg_service.conf

ดังนั้น:

  • Start-> Run
  • `% APPDATA%
  • สร้างไดเรกทอรี "postgresql" หากไม่มีอยู่
  • สร้างไฟล์ ".pg_service.conf" เป็นไฟล์ข้อความที่มีเนื้อหาที่ระบุด้านบน (ดูหมายเหตุด้านล่างตั้งชื่อไฟล์ใหม่)
  • ใน PgAdmin-III ให้ป้อน "localhost" ในชื่อโฮสต์และชื่อบริการในฟิลด์บริการ

ฉันทดสอบบน Windows และพบว่าคุณไม่สามารถออกจากhostฟิลด์ใน PgAdmin-III ว่างบน Windows PgAdmin-III ดูเหมือนว่าจะแทนที่โฮสต์ใด ๆ ที่ระบุในไฟล์บริการด้วยสิ่งที่ระบุไว้ในกล่องโต้ตอบการเชื่อมต่อ ดังนั้นคุณไม่ควรใส่hostรหัสในไฟล์บริการ (ฉันจะรายงานข้อผิดพลาด)

ทำให้ "ซ่อนนามสกุลไฟล์สำหรับประเภทไฟล์ที่รู้จัก" ถูกปิดใน Windows ดังนั้นคุณจะไม่เรียกมัน.pg_service.conf.txtแทนโดยไม่ตั้งใจ หากคุณไม่แน่ใจว่าชื่อถูกต้องหรือไม่ให้ตรวจสอบคอลัมน์ "ประเภท" ใน Windows Explorer ในมุมมองรายการ มันจะอ่าน "เอกสารข้อความ" ถ้ามันชื่อไม่ถูกต้อง.pg_service.conf.txtและถ้ามันชื่ออย่างถูกต้องCONF File .pg_service.confหากคุณมีปัญหาในการเปลี่ยนชื่อให้ปิด "ซ่อนนามสกุลไฟล์สำหรับประเภทไฟล์ที่รู้จัก" หรือใช้โปรแกรมแก้ไขข้อความที่เหมาะสมเช่นnotepad ++ซึ่งจะช่วยให้คุณสร้างไฟล์ที่มีชื่อตามที่คุณต้องการ

หมายเหตุช่วงเวลานำหน้า (จุด) ในชื่อไฟล์ ใช่มันแตกต่างจากpgpass.confและใช่มันน่ารำคาญติดกับบั๊ก


ขอบคุณมากสำหรับสิ่งนี้! ฉันใช้เวลา 45 นาทีในการลองทำสิ่งนี้บนคอมพิวเตอร์ Windows 7 ของฉัน สิ่งแรกคือฉันไม่สามารถปล่อยให้ฟิลด์ "โฮสต์" ว่างได้ มันจะปิดการใช้งานปุ่ม "ตกลง" ในกล่องโต้ตอบนั้น ฉันพยายามใช้ "-" เป็นโฮสต์ซึ่งทำให้ฉันมีปัญหาที่สอง ฉันไม่ทราบว่าจะวางไฟล์ pg_service.conf ไว้ที่ไหน ฉันพยายามทำการทดลองและข้อผิดพลาดและวางไว้ในไดเรกทอรีย่อยทั้งหมดที่เกี่ยวข้องกับ PgAdmin III และใน C: \ Users \ pc \ AppData \ Roaming \ postgresql ฉันมักจะมีข้อผิดพลาด: "ความหมายของการบริการ 'myherokudb' ไม่พบ.
เดวิด

1
ฉันยังพยายามอ่านเกี่ยวกับ pg_service.conf ด้วย แต่ดูเหมือนว่าฉันจะพบเฉพาะเอกสารอ้างอิงในบริบทฝั่งเซิร์ฟเวอร์
David

ฉันไม่ทราบว่าคุณได้รับ "บริบทฝั่งเซิร์ฟเวอร์" ที่ระบุว่าเอกสารที่ฉันเชื่อมโยงเพื่ออ้างถึงลูกค้า ถ้าคุณไม่ถือว่า "unix / linux" หมายถึง "เซิร์ฟเวอร์" ซึ่งไม่ได้เป็นเช่นนั้น เนื่องจากคุณไม่ได้สนใจที่จะพูดถึงว่าคุณใช้ระบบปฏิบัติการอะไรฉันจึงไม่เจาะจงมากขึ้น ตอนนี้ฉันได้อัปเดตคำตอบด้วยข้อมูลเฉพาะของ Windows (และตรงไปตรงมามันยุติธรรมพอที่คุณสับสน) นอกจากนี้บน Windows PgAdmin-III ดูเหมือนว่าจะแทนที่โฮสต์ที่ระบุในไฟล์บริการด้วยรายการที่ระบุใน UI ดังนั้นปล่อยhostให้ไฟล์บริการว่างเปล่า
Craig Ringer

ขอบคุณมากสำหรับความช่วยเหลือของคุณ! โซลูชันของคุณใช้งานได้! มันเป็นจุดนำในชื่อไฟล์ที่ทำให้ฉันสับสนฉันคิดว่ามันเป็นเรื่องลีนุกซ์ ขอขอบคุณอีกครั้ง!
David

2
จริงๆแล้ววิธีนี้ไม่ได้ผลเลย ฉันใช้เวลานานกว่าจะได้ข้อสรุปโดยคิดว่ามันทำให้เกิดความไม่เสถียรของเครือข่ายของฉันเป็นต้น แต่การเชื่อมต่อยังคงหมดเวลา ฉันมั่นใจว่าฉันได้ทำตามคำอธิบายของคุณแล้ว อาจเป็นกรณีที่ heroku วางบางสิ่งบางอย่างเพื่อหลีกเลี่ยงการเชื่อมต่อกับเซิร์ฟเวอร์ทดสอบฟรีหลายพันตัวที่โฮสต์ฐานข้อมูลฟรีหลายร้อยแห่ง
David
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.