دواړه کلاینټونه په یوه لیپ ټاپ کې دي، له یوه ټنل څخه تېرېږي، او یوازې یو یې نښلېږي۔ دا پرتله د دې ثبوت ښکاري چې VPN ټاکونکی دی، حال دا چې ډېر عام توضیح دا دی چې دواړه کلاینټونه مختلفو منزلونو ته ډایل کوي۔ یو GUI خپل هوسټ، پورټ، رول او TLS تنظیمات ساتي او کله چې اړتیا وي په غلیمانه توګه SSH لېږد جوړوي، حال دا چې psql د خپل شل هغه libpq ډیفالټونو څخه چې کېدای شي مخکې تنظیم کړي وي، اړیکه جوړوي۔ د فعالې اړیکې بیا جوړول د GUI تنظیمات لوستل دي، نه د ټنل بیا نصبول۔

افسانه: یو فعال کلاینټ لاره ثبوتوي

که GUI ونښلېږي، ټنل ټرافیک وړي، او GUI یوازې همدا ثبوتوي۔ دا هېڅ نه وایي چې psql کوم پته حل کوي، په کوم رول تصدیق کوي، یا هغه ساکټ چې پرانیزي کله هم له ماشین څخه وځي۔ لاره شریکه ده؛ پارامترونه نه۔

محلي لېږد توپیر زیاتوي۔ GUI کېدای شي په هغه پورټ کې چې SSH ته لېږلی، له 127.0.0.1 سره ونښلېږي، او هغه اورېدونکی یوازې د GUI ناستې تر پایه شته۔ psql چې پرته له لېږد localhost ته اشاره کوي، رد شوې اړیکه ترلاسه کوي چې VPN سره هېڅ تړاو نه لري۔

هغه پای ټکی ولولئ چې GUI واقعاً کاروي

د اړیکې ځانګړنې پرانیزئ او څلور ارزښتونه کاپي کړئ: هوسټ، پورټ، ډېټابیس او رول۔ بیا د ټنل ټب پټ کړئ، ځکه چې SSH لېږد یوه خصوصي پته په محلي پورټ بدلوي او هغه بدلوي چې psql ته باید وویل شي۔

SettingWhat the GUI holdsWhat psql uses when the value is absent
DestinationA saved hostname, sometimes behind a forwardA local Unix socket, not the remote endpoint
PortThe direct port or a forwarded local port5432, or the port from a service file
Role and databaseStored per connection profileYour operating-system user name
TLS identityIts own CA bundle and verification modeWhatever PGSSLMODE or the service file says
Startup filesNot read at allRead unless -X is passed

هره کرښه په بېل طبقې کې ناکامېږي، او هغه پیغام چې ترلاسه کوئ د هغې طبقې نوم اخلي۔ د خوندي پروفایل دوستانه نوم psql کې لګول پورته هېڅ ارزښت نه وړي، او د خدمت نوم د هغې فایل له لارې حل کېږي چې ټرمینل کېدای شي هېڅکله ونه لولي۔

libpq له ستاسو شل څخه څه میراث اخلي

psql د libpq پر سر یو نری کلاینټ دی، او libpq چاپېریال تر هر بل شي مخکې لولي۔ لکه PGHOST, PGHOSTADDR, PGPORT, PGDATABASE, PGUSER, PGSERVICE او PGSSLMODE ارزښتونه هر یو کولی شي د اړیکې یوه برخه بل لوري ته واړوي۔ دوی میراث اخلي نه ټایپ کېږي، نو هغه حکم چې وچلوئ هېڅ یې نه ښیي۔ صادر شوی PGSSLMODE هم کولی شي پرته له یوې کلمې په حکم کرښه کې بدل کړي چې کلاینټ څه مني۔

له دې ارزښتونو دوه یې لومړی شک ته وړ دي۔ PGHOSTADDR یو عددي منزل وړاندې کوي چې د نومونو حل ته له پامه تېرېږي، حال دا چې د هوسټ نوم لا هم د سند هویت ټاکي، او PGSERVICE له خدمت فایل څخه هوسټ، ډېټابیس او TLS غوراوي راوباسي۔ د دې ډیبګ کولو لپاره ټول چاپېریال تویول بده عادت دی، ځکه کېدای شي پټنومونه او بېتړاوه ټوکنونه ولري؛ پرځای یې هغه ارزښتونه وټاکئ چې تاسو ته مهم دي۔

د host او hostaddr دواړو پرېښودل د شبکې پتې پرځای د Unix ډومین ساکټ ټاکي۔ له همدې امله پرته له -h psql غوښتنه کېدای شي په محلي توګه بریالۍ شي، یا د ساکټ تېروتنې سره ناکامه شي، پرته له دې چې هغه لار چې GUI کاروي هېڅکله وټکوي۔

هماغه پارامترونه په لاس پټ کړئ

کله چې د GUI ارزښتونه په لاس کې وي، هغه په روښانه توګه وسپارئ او هغه پیل فایل پرېږدئ چې کېدای شي سرغړونې ورزیات کړي۔ لاندې اړیکې کرښه بېلګه ده: پای ټکی، پورټ، ډېټابیس او رول د هغو ارزښتونو سره بدل کړئ چې ستاسو مدیر تصویب کړي دي، او هغه باور ترتیبات وساتئ چې لا دمخه کار کوي۔

psql -X "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5"

په دې حکم کې درې تفصیلات قصداً دي۔ -X د psql پیل فایل غږموي، خو د libpq چاپېریال یا د خدمت تعریف نه غږموي۔ connect_timeout=5 تشه لار مخنيوي کوي چې ټرمینل د دقیقو لپاره ځوړند کړي۔ sslmode=verify-full د سند او د هوسټ نوم څېړنې روښانه ساتي، او کله چې TLS تېروتنه ښکاره شي خلک همدا برخه بندوي۔

که تصویب شوی پای ټکی د یوه pooler شاته وي، پورټ 6432 او پورټ 5432 کېدای شي د بېلو سرور هویتونو له لارې ورته ډېټا ته ورسېږي، او تصدیق کېدای شي د ډېټابیس پر نوم نه، بلکې د pooler پر نوم ناکام شي۔ د حالت کمزوري کولو پرځای د اړیکې کرښه کې نوم سم کړئ۔

پرېږدئ چې د تېروتنې پیغام بل ګام وټاکي

د ناکامۍ متن وایي چې هڅه څومره لرې لاړه، او دا د ټنل په اړه هر اټکل ماتوي۔ هغه نوم چې نه حل کېږي د ساکټ له جوړېدو مخکې ناکامېږي، د وخت پای ته رسېدل معنا دا ده چې لار یا فایر وال پاکټونه غورځولي، ردول معنا دا ده چې یو څه ځواب ورکړ او انکار یې وکړ، او تصدیق تېروتنه معنا دا ده چې شبکه لا دمخه کار کاوه۔

psql -X -w "host=db.internal.example port=6432 dbname=orders user=report_ro sslmode=verify-full connect_timeout=5" -c '\conninfo'
env | grep -E '^PG'
psql --version

د \conninfo وتلې د GUI ژوندې ناستې سره پرتله کړئ: هماغه هوسټ، هماغه پورټ، هماغه رول، هماغه TLS حالت۔ کله چې دا څلور سره سم شي، VPN ته د تشریح کولو نور څه نه پاتې کېږي۔ تر څو چې نه وي سم شوي، په ټنل کې هره اضافي بدلون د هغې اړیکې په اړه اټکل دی چې ټرمینل هېڅکله نه ده جوړه کړې۔

اړوندې مقالې