4.4 Yönetilen veritabanları

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 4. Yapılandırma >

4.4 Yönetilen veritabanları

Ajanın bağlandığı veritabanları conf dosyasında değil, ajanın kalıcı MASTER'ında (${APPDIR}/ivd$master.sqlite) kayıtlıdır. Bir veritabanı, çalışan hizmete msql ile verilen CREATE DATABASE ya da OPEN DATABASE deyimiyle kaydedilir; CRUD, WhatsAppWebhook uygulamalarının database anahtarı, rapor uçları, MCP kipi ve ZMGOREV zamanlayıcı bu kayıt adına başvurur. Değişiklik hizmet yeniden başlatıldığında etkinleşir.

open database NETSIM storage engine firebird
  parameters 'Database Name=devdata.fdb; charSet=UTF8; User Name=SYSDBA; Password=masterkey';
comment on database NETSIM is 'Netsim Veritabanı';
alter database NETSIM set task scheduler on;
commit;
msql -U SYSDBA -W <parola> -f kayit.sql
Kayıt bilgisiAçıklama
AdVeritabanının MASTER'daki adı. Uygulamalar ve -DATABASE bu adla seçer; eşleme büyük/küçük harf duyarsızdır. Uygulama adı vermezse kimlik sırasına göre istemci bağlantısı kurulabilen ilk kayıt kullanılır.
Depolama motoruİstemci bağlantısı FIREBIRD, POSTGRESQL ve SQLITE motorlu kayıtlara kurulur (sağlayıcı sırasıyla firebird, postgresql, sqlite). Başka motorlu bir kayıt (MEMORY, ODBC, …) motorun kendi veritabanıdır; ona istemci yolu açılmaz ve istek “istemci bağlantısı kurulamayan bir motorda” hatası alır.
ParametrelerPARAMETERS değeri istemci bağlantı dizesidir. Database Name göreli verilirse ikilinin dizinine göre çözülür; Linux dağıtımında veritabanı geleneksel olarak /var/lib/… altındadır. Parola yerine işletim sistemi oturumunun kimliği kullanılabilir — aşağıya bakın.
AçıklamaCOMMENT ON DATABASE; yönetim arayüzünde ve ZMGOREV bildirimlerinde görünür.
Görev zamanlayıcıALTER DATABASE <ad> SET TASK SCHEDULER ON | OFF. Açık olan veritabanları için ZMGOREV zamanlayıcı çalışır: aynı anda en çok 20 görev, bir görev süreci 100 görev için yeniden kullanılır, çökmeden yarım kalan görevler toparlanır. Öndeğer kapalıdır.
Bağlantı havuzuSüreç başına veritabanı ve kimlik başına 4 boş bağlantı bekletilir, boş bağlantı 300 saniye sonra kapatılır, toplam bağlantı sınırı yoktur (bkz. “Bağlantı havuzu” aşağıda).

Kayıtlar MASTER'dan sorgulanır; görev zamanlayıcı bayrağı kayıt satırının TASK SCHEDULER niteliğidir, veritabanının kendi kartında (sys.ivd$database.ivd$task_scheduler) da durur:

select o.ivd$object_name, o.ivd$description, a.ivd$attribute_name, a.ivd$value
  from master.sys.ivd$objects o
  left join master.sys.ivd$object_attributes a on a.ivd$object_id = o.ivd$object_id
 where o.ivd$type = 'DATABASE' and o.ivd$object_id > 0
 order by o.ivd$object_id, a.ivd$order;

Nitelik adları STORAGE ENGINE, ENGINE PARAMETERS ve TASK SCHEDULER'dır. Yönetim arayüzü aynı listeyi GET /AdminREST/MANAGEDDATABASES ile okur (parola maskelenir).

4.4.1 Yeni sunucuya ürün veritabanı kurmak (Veritabanı kurulumu sayfası)

Yeni kurulmuş bir PostgreSQL ya da Firebird sunucusuna ürün veritabanı, dağıtım setindeki hazır veritabanından kurulur. Yönetim arayüzünün Veritabanı → Veritabanı kurulumu sayfası (arkasında AdminREST EXECCOMMAND DBSETUP) adımları ajanın kendisinde yapar. Denetle hiçbir şey yazmaz, her adımı YAPILACAK ya da hata olarak listeler; Kur adımları uygular ve işaretliyse veritabanını OPEN DATABASE ile bu ajana kaydeder (deyim onaydan önce, parola maskeli gösterilir). Kaynak dosya ve kütüphane dosyası sunucudan seçilir ya da istemciden yüklenir.

DepoNe yapılır
PostgreSQLKaynak netsim_n4-<sürüm>.backup (pg_dump -Fc). Sırasıyla: pg_restore bulunur (backupTools/pgBinDir, libpq dizini, kayıt defteri, PATH); yedek okunur; sunucuya süper kullanıcıyla (postgres) bağlanılır; yeni veritabanı adı yoksa devam edilir (küçük harf, rakam, alt çizgi); LOAD 'pgNSDBUtils5_1_1' denenir — kütüphane yoksa ve sunucu ajanla aynı makinedeyse verilen dosya (pgNSDBUtils5_1_1.dll.zip / .so.zip ya da açılmış hâli) sunucunun kütüphane dizinine (pg_config PKGLIBDIR) kurulur, başka makinedeyse elle kopyalanması söylenir; dblink uzantısı gerekir, sunucuda bulunmayan geliştirme uzantıları (pldbgapi, plpgsql_check) geri yüklemeden çıkarılır; yedeğin sahip rolleri yoksa oluşturulur (sysdba LOGIN SUPERUSER sayfada verilen parolayla, ötekiler NOLOGIN); veritabanı yedeğin kendi tanımıyla, yedekte yoksa ürünün tanımıyla açılır (TEMPLATE template0, UTF8, ICU tr-TR, sahip sysdba, search_path netsim, eklenti, public, TimeZone +03; işletim sisteminde Türkçe yerel ayar yoksa LC_COLLATE/LC_CTYPE template0'dan alınır ve uyarı verilir — Linux'ta locale-gen tr_TR.UTF-8); pg_restore koşar (parola ortam değişkeniyle gider); düşerse yarım veritabanı silinir. Son adım kimlik kartını ve olay tetikleyicilerinin durumunu gösterir. Kayıt Catalog Schema=netsim ile yapılır.
FirebirdKaynak netsim.fdb.zip / netsim.sec.fdb.zip ya da bir .fdb. Ajan Firebird sunucusuyla aynı makinede olmalıdır: dosya hedef yola (sunucunun tam .fdb yolu, henüz yok) açılır, Linux'ta sahibi firebird yapılır. Sonra yeni veritabanına bağlanılır; ServerMode Classic değilse uyarı verilir; ürünün UDF modülü (NSDBUtils5_1_1) Firebird'ün UDF dizininde (sunucu sürecinin dizini + UdfAccess'in Restrict dizini) yoksa verilen kütüphane dosyası (NSDBUtils5_1_1.dll.zip / libNSDBUtils5_1_1.so.zip) oraya kurulur; UdfAccess = None ise kurulum durur. Bağlanma düşerse kopyalanan dosya silinir. Son adım bağlantı tetikleyicilerini ve kimlik kartını gösterir.

Kütüphane kurulumu ve .fdb dosyasının yazılması ajanın hizmet hesabının o dizinlere yazma hakkı olmasını ister; hak yoksa adım bunu söyler ve dosya elle kopyalanır. İstek bitene kadar sürer (1532 paketinde PostgreSQL geri yüklemesi yaklaşık 20 saniye).

4.4.2 Kayıttaki parola mühürlüdür (ivd$master.key)

ENGINE PARAMETERS'ın Password= değeri MASTER'da düz metin durmaz: kayda yazılırken AES-256-GCM ile mühürlenir ve satırda Password=enc:<hex> görünür — yukarıdaki sorguyu çalıştıran SYSDBA bile parolayı okuyamaz. Ajan parolayı yalnız depoya bağlanırken çözer. Anahtar, ivd$master.sqlite'ın yanındaki ivd$master.key dosyasıdır (32 bayt; ilk açılışta üretilir, Linux'ta 0600). Daha önce düz metin yazılmış kayıtlar ajanın ilk açılışında kendiliğinden mühürlenir (günlükte carried a plain-text storage password; sealed). Servis kullanıcısıyla kayıtlı satırlarda parola satırda hiç durmaz; depo sunucusunun credential'ındadır (aşağıda).

Dikkat

ivd$master.key MASTER dosyasının parçasıdır: yedeğe ve taşımaya birlikte alın. Anahtarsız (ya da başka bir sunucunun anahtarıyla) açılan MASTER'da kayıtlı parolalar boş kalır, günlüğe veritabanı adıyla bir uyarı düşer ve depo kendi kimlik hatasını verir; her kaydın parolası ALTER DATABASE … SET PARAMETERS (ya da Veritabanları sayfasında Parametreleri düzenle) ile yeniden girilir. Anahtar dosyasının ve MASTER dosyasının okuma izinlerini kısın (Windows'ta yalnızca hizmet hesabı ve yöneticiler; Linux'ta hizmet kullanıcısına ait, 0600 / 0640): dosyaları okuyabilen parolayı da çözebilir. Parolayı kayıttan tümüyle kaldırmak mümkündür — bir alttaki başlığa bakın.

4.4.3 Parola yerine işletim sistemi oturumu (OS Authentication)

Bağlantı dizesine OS Authentication=Yes yazılırsa ajan kullanıcı adı ve parola göndermez; kimlik doğrulama hizmetin altında koştuğu Windows/POSIX oturumunun kimliği üzerinden yürür. Dizede bir Password dursa bile yok sayılır, yani kayıttan parolayı tamamen çıkarabilirsiniz:

open database NETSIM storage engine firebird
  parameters 'OS Authentication=Yes; Database Name=devdata.fdb; charSet=UTF8';

4.4.4 Kayıttaki kimlik motorun servis kullanıcısıdır (engineUser)

Kayıt formunda (ya da CREATE/OPEN DATABASE … PARAMETERS'ta) verdiğiniz SYSDBA/postgres parolası kaydedilmez: ajan onunla bir kez bağlanır, depoda engineUser ayarındaki kullanıcıyı (öndeğer IVD$ENGINE) süper kullanıcı olarak kurar (PostgreSQL SUPERUSER; Firebird GRANT ADMIN ROLE + CREATE DATABASE hakkı + veritabanında DEFAULT RDB$ADMIN) ve rastgele bir parola üretir. Kullanıcı adı ile parola, depo sunucusu başına MASTER'da bir credential'da saklanır: SYS.IVD$ENGINE_<AİLE>_<SUNUCU>_<PORT> (TYPE DBLINK; ör. SYS.IVD$ENGINE_POSTGRESQL_LOCALHOST_5432). Kayıt satırı yalnız ona başvurur (Credential=SYS.…), kullanıcı adı ve parola satırda durmaz. Aynı depo sunucusunun bütün kayıtları aynı credential'ı kullanır; sunucunun son kaydı kapatılsa da credential kalır ve sonraki kayıt parolayı ondan alır. Sunucu, sunucu adı ve porttan tanınır (Firebird'de Database Name içindeki sunucu:yol ya da sunucu/port:yol öneki de sunucu adıdır, öneksiz yol yerel sunucudur; ODBC kaydı PostgreSQL sayılır). Boş sunucu adı, localhost, 127.0.0.1 ve ::1 aynı yerel sunucudur; yerel Firebird sunucusu porttan bağımsız tek credential kullanır (SYS.IVD$ENGINE_FIREBIRD_LOCALHOST), makinede tek Firebird sunucusu olduğu varsayılır. Kayıt sqlite ya da OS Authentication=Yes ise bir şey yapılmaz. Servis kullanıcısı depoda zaten varsa ve bu ajanda o sunucunun credential'ı yoksa (başka bir ajan kurmuştur) kullanıcıya dokunulmaz: kayıt verilen kimlikle yapılır ve bir uyarı gösterilir; kaydı servis kullanıcısına geçirmek için Servis kullanıcısına geçir kullanılır. Firebird'de yönetici yetkisi (RDB$ADMIN) her veritabanı dosyasına ayrı yazılır: Servis kullanıcısına geçir aynı sunucudaki bütün Firebird kayıtlarının dosyalarında bu yetkiyi verir. Dosya dışarıda (örneğin ürünün derleme aracıyla SYSDBA olarak) yeniden üretilirse yetki kaybolur ve kayıt "servis kullanıcısı bu veritabanında yetkisiz" iletisiyle açılmaz; aynı işlem yetkiyi yeniden verir. Parametreleri düzenle'de maskesiz bir parola yazılırsa o kayıt credential'dan çıkar ve kendi (mühürlü) parolasını taşır. Credential'ın parolası katalogda kodlu durur; MASTER dosyasını okuyabilen onu çözebilir — dosya izinlerini yukarıdaki gibi kısın.

Dikkat

Aynı PostgreSQL/Firebird sunucusunu kullanan iki ajan (örneğin geliştirme makinesinde iki kopya) engineUser için farklı adlar almalıdır; aynı adla ikisi birbirinin parolasını ezer ve birinin bağlantıları düşer. Eski bir kaydı (süper kullanıcı taşıyan) dönüştürmek için Veritabanları sayfasında Servis kullanıcısına geçir düğmesini kullanın (deponun süper kullanıcı adını ve parolasını sorar, parola yalnız o işlem için gider; servis kullanıcısının parolasını ajan üretir ya da "Ben belirleyeyim" ile siz girersiniz — parola sunucunun credential'ına yazılır; aynı sunucuda parolayı hâlâ satırında taşıyan servis kullanıcılı kayıtlar da credential'a bağlanır) ya da SQL sayfasından set storage credentials user '…' password '…'; alter database X set engine user; çalıştırın. Komut hangi veritabanından verilirse verilsin çalışır; açılamayan ya da açıkken depo parolası değişmiş bir kayıt da böyle, ajan yeniden başlatılmadan onarılır.

4.4.5 Yükseltme deponun süper kullanıcısıyla

Yükseltme sayfası (UPGRADE, UPGRADE LEVEL; önizleme hariç) Firebird / PostgreSQL / ODBC veritabanında deponun süper kullanıcısıyla koşar: kullanıcı adı (öndeğer sysdba) ve parola sayfanın üstündeki Depo süper kullanıcısı alanına girilir; alan yalnız bu depolarda görünür, parola boşsa yükseltme başlamaz. Parola her yükseltmeden önce aynı oturuma SET STORAGE CREDENTIALS ile verilir ve ardından silinir — ne kayda, ne günlüğe, ne SQL izine girer; depo reddederse alan boşaltılır. Yedek ve bütün yazımlar bu kimlikle ayrı bir bakım bağlantısında koşar; yanlış parola yükseltmeyi başlatmadan reddeder. SYSDBA ile açılmış bir oturum kimlik vermezse kayıttaki servis kullanıcısıyla koşar; başka bir login kimlik vermeden yükseltme başlatamaz.

4.4.6 Oturumun kendi kimliğiyle depo bağlantısı (Session Authentication)

Kayıttaki User Name/Password öndeğerde her oturumun depo kimliğidir: yönetim arayüzünün SQL sayfası, msql, FireDAC sürücüsü ve MCP ile gelen her istek depoya bu (genelde süper kullanıcı) kimlikle gider, IVEDI'nin hakları onun üstünde uygulanır. Bağlantı dizesine Session Authentication=Yes yazılırsa login'li bir oturumun depo bağlantısı o login'in kullanıcı adı ve oturum açarken verdiği parolayla kurulur; kayıttaki kimlik yalnız ajanın kendi iç bağlantılarında (katalog yükleme, zamanlayıcı) ve SYSDBA oturumlarında kalır. Depoda aynı adlı ve aynı parolalı bir kullanıcı/rol bulunmalı ve hakları orada verilmiş olmalıdır (GRANT zaten depoya yansıtılır); depo kendi haklarını uygular, IVEDI'de SYSADMIN olmak depoda hak kazandırmaz. Ayrıntı ve ad katlama kuralları SQL kılavuzunun "Oturumun kimliğiyle depo bağlantısı" bölümündedir.

open database NETSIM storage engine postgresql
  parameters 'Server Name=localhost; Database Name=netsim; User Name=netsim_svc; Password=***;
              Catalog Schema=netsim; Session Authentication=Yes';

4.4.7 Kimlik bilgisini ortam değişkeninden almak

Kullanıcı adı ve parola bağlantı dizesinden tümüyle çıkarılabilir. O zaman kimliği istemci kütüphanesi kendi ortam değişkenlerinden okur — bu, ajanın değil sağlayıcının davranışıdır, dolayısıyla değişken adları sağlayıcıya göre değişir:

SağlayıcıDeğişkenlerNot
postgresql PGUSER, PGPASSWORD Çalışır. Ajan user= ve password= alanlarını bağlantı dizesine yalnızca boş değillerse ekler; yoksa libpq kendi değişkenlerine düşer. PGHOST, PGPORT, PGDATABASE gibi diğer libpq değişkenleri de aynı kuralla geçerlidir.
firebird ISC_USER, ISC_PASSWORD Bugün güvenilmemelidir. fbclient kimlik verilmediğinde bu değişkenleri kullanır, ama ajan kullanıcı adı/parola alanlarını bağlantı bloğuna boş olsalar bile koyar; yani ortam değişkenine düşülmesi garanti değildir. Firebird'de parolayı dizeden çıkarmanın desteklenen yolu OS Authentication=Yes'tir (yukarıya bakın).
odbc sürücüye göre Sürücü yöneticisi ve DSN belirler. psqlODBC gibi PostgreSQL sürücüleri PG* değişkenlerini onurlandırır; başka sürücüler için sürücü belgesine bakılmalıdır.
sqlite—Kimlik bilgisi kavramı yoktur.
Dikkat

Ortam değişkeni, hizmetin kendi ortamında görünmelidir. Windows'ta hizmet LocalSystem (ya da -INSTALL -SERVICE_USER ile verilen hesap) altında koşar, yani kuran kişinin oturum değişkenleri geçmez; makine düzeyinde tanımlanmalıdır. Linux'ta üretilen birime Environment= ya da EnvironmentFile= satırı eklenir (systemctl edit katmanı yeğlenir, çünkü -INSTALL üretilen gövdeyi yeniden yazar).

Bir sürecin ortam bloğu, komut satırının aksine süreç listesinde görünmez; parolayı komut satırına koymaktan bu yönüyle iyidir. Aynı hesapta hata ayıklama yetkisi olan bir süreç yine okuyabilir.

Üç istemci sağlayıcısından ikisi seçeneği tanır. Aşağıdaki tablo istemci tarafında ne değiştiğini ve sunucu tarafında neyin yapılandırılmış olması gerektiğini verir; ikincisi olmadan seçenek yalnızca bağlanmayı engeller:

Sağlayıcıİstemcide ne olurSunucuda ne gerekir
firebird DPB'ye isc_dpb_trusted_auth konur, kullanıcı adı/parola hiç gönderilmez. CREATE DATABASE yolunda USER/PASSWORD yan tümceleri de yazılmaz. firebird.conf'ta Win_Sspi kimlik doğrulama eklentisi devrede olmalı (AuthServer listesinde) ve Windows kimliğini bir Firebird kullanıcısına bağlayan bir eşleme bulunmalı: CREATE OR ALTER GLOBAL MAPPING <ad> USING PLUGIN WIN_SSPI FROM USER "ALAN\KULLANICI" TO USER SYSDBA;. Eşleme yoksa bağlanma Missing security context ile döner — bu, istemci tarafında bir kusur değil eksik eşlemenin işaretidir. Win_Sspi kimliği ALAN\KULLANICI biçiminde ve büyük harfle gelir; eşlemede ayrılmış (çift tırnaklı) tanımlayıcı olarak yazılır.
postgresql libpq bağlantı dizesine password yazılmaz. User Name verilmişse yine gönderilir; verilmemişse libpq oturumun kullanıcı adını kullanır. pg_hba.conf'ta ilgili satırın kimlik doğrulama yöntemi sspi (Windows) ya da gss/peer/ident (POSIX) olmalı ve işletim sistemi kullanıcısının bir PostgreSQL rolüne karşılığı bulunmalı — adlar birebir değilse pg_ident.conf ile eşlenir (include_realm=0 gerçek alan adını kırpar). pg_hba ilk eşleşen satırı kullanır ve başarısız doğrulamada geri dönüş yoktur, bu yüzden yeni satır catch-all satırlarından önce ve mümkün olduğunca dar (kullanıcı/veritabanı adına göre) yazılır.
sqlite Kimlik doğrulama diye bir şey yoktur; seçenek etkisizdir. Bu yolda bir uyarı da yazılmaz — uyarı yalnızca CREATE DATABASE … STORAGE ENGINE yolunda çıkar (bkz. 4.9).
Not

Bu yol hizmet kipinde uçtan uca çalışır (Windows, FIREBIRD motorlu kayıt, gerçek bir hesapla kurulmuş hizmet): bağlantı dizesinde User Name/Password hiç yokken bağlantı açılır, yani parolanın kayıttan tamamen çıkarılması yalnızca kâğıt üzerinde bir seçenek değildir. Sunucu tarafı eşlemesi olmadan aynı dize Missing security context ile döner.

Tanı sırası şu iki davranışı bilmeden yanıltıcıdır:

  • Veritabanı bağlantısı açılışta kurulmaz, ilk kullanımda kurulur. Ajanın temiz açılması bağlantı dizesinin doğru olduğunu göstermez; yanlış bir dize ya da eksik bir eşleme kendini ilk istekte gösterir. Bağlantıyı sınamanın en kısa yolu, hizmeti başlattıktan sonra o veritabanına giden bir istek atmak ve günlüğe bakmaktır.
  • Database Name'deki göreli bir ad bir dosya olmak zorunda değildir: Firebird'de aynı ad sunucunun databases.conf'undaki bir takma ad olabilir ve bambaşka bir yoldaki dosyayı gösterebilir. "Dosya yok" diye aramaya başlamadan önce oraya bakın.

Hizmetin hesabını -INSTALL -SERVICE_USER ile vermek gerekir; kurulmuş bir hizmette hesabı sc config <ad> obj= ile değiştirmek yetmez, çünkü o yol SeServiceLogonRight'ı vermez ve başlatma 1069 ile düşer (bkz. 2.2).

Aynı seçenek ajanın kendi MQL motorunda CREATE DATABASE … STORAGE ENGINE yazarken de geçerlidir; orada ODBC motoru da destekler. O yolun ayrıntısı MQL kılavuzunun “Depolama motorları” bölümündedir: IVEDI SQL Kullanıcı Kılavuzu.

Not

Hizmet olarak koşarken kimlik, hizmetin oturum açma hesabıdır, ajanı kuran kişinin hesabı değil. -INSTALL hesap adı vermez, yani hizmet Windows'ta LocalSystem (yerel bağlantıda NT AUTHORITY\SYSTEM, ağda MAKINE$ makine hesabı), Linux'ta root olarak koşar — ikisi de bir kişi değildir. Bu yüzden OS Authentication kullanılacaksa ya eşlemeyi o kimlik için tanımlayın, ya da hizmete gerçek bir hesap verin — en kolayı kurulumda: -INSTALL -SERVICE_USER "ALAN\hesap" -SERVICE_PASSWORD "..." (Linux'ta -INSTALL -SERVICE_USER netsim), bkz. 2.2 ve 2.3. Konsol kipinde (-A) kimlik ajanı başlatan kullanıcıdır — bu yüzden konsolda çalışan bir yapılandırma hizmet olarak çalışmayabilir; kurulum sonrası doğrulamayı (bkz. 2.6) hizmet kipinde yapın.

Dikkat

ZMGOREV'in yedekleme görevi (tür 6) gbak'ı işletim sisteminin arama yolundan (PATH) bulur ve kendi süreç ortamına koyduğu ISC_USER/ISC_PASSWORD ile çalıştırır ve bu kimliği önce görev tanımının PARAMETRELER alanından, orada yoksa bağlantı dizesindeki User Name/Password'dan alır. OS Authentication kullanıldığında geri düşülecek bir parola yoktur; gbak da kimliksiz kalıp kendi istemci eklenti listesiyle işletim sistemi oturumuna düşer. Bu bileşim ölçülmemiştir — yedekleme görevi kullanılıyorsa kimliği görev tanımının PARAMETRELER alanında açıkça verin, ya da yedeklemeyi bir kez elle koşup doğrulayın.

4.4.8 Bağlantı havuzu

CRUD uygulamasının kullandığı istemci bağlantıları bir havuzda yaşar: bir istek bitince bağlantı kapatılmaz, açık kalmış transaction geri alınır ve bağlantı havuza döner; aynı işçi sürecin bir sonraki isteği yeniden bağlanmaz. İşçi süreçlerin kendisi zaten havuzlu olduğu için (poolTimeoutMS) bir işçi art arda pek çok isteğe bakar ve bağlantısı onunla yaşar.

Havuzun kaydı süreçler arasıdır, bağlantının kendisi sürece bağlıdır. Havuz nesnesi ve kayıt listesi paylaşılan bellektedir (kontrol bloğunun adlı nesnesi); bütün işçi süreçler aynı listeyi görür, aynı kilidi alır ve MONITORDATA hepsini birden sayar. Her kayıt onu açan sürecin kimliğini taşır ve yalnızca o süreç tarafından kiralanabilir. Nedeni fizik: depolama istemcisinin tutamacı sürece aittir — fbclient'in tutamacı sürecin kendi tutamaç tablosunun indisidir, libpq'nun PGconn'u o sürecin yığınındaki bir işaretçidir. Başka sürecin bağlantısı kullanılamaz da kapatılamaz; ölen bir sürecin kaydı bir sonraki havuz işleminde silinir (orphaned sayacı), nesnesi süreçle birlikte gitmiştir. Usta süreç bir isteği HTTP'yi okumadan işçiye verdiği için “bağlantısı olan işçiye yönlendirme” diye bir şey yoktur: işçi kendi bağlantısını kendi bir sonraki isteğine verir, günlükte Baglanti havuzu: surec N kendi baglantisini yeniden kullaniyor satırı ve MONITORDATA.connectionPool.byProcess bunu gösterir.

DeğerAnlamı
Boş bağlantı: 4Süreç başına, aynı anahtar (veritabanı + kimlik) için boş bekletilecek en çok bağlantı.
Boşta bekleme: 300 snBoş bekleyen bağlantının kapatılacağı süre. Ayrı bir zamanlayıcı yoktur, bir sonraki havuz işleminde denetlenir; işçi süreç kapanırken kendi kayıtlarını kapatır.
Toplam sınır: yokBütün süreçlerin bir veritabanına açtığı canlı bağlantı sayısı sınırlanmaz.

Havuzun anahtarı veritabanı adı ve kimliktir (kullanıcı adı + parola özeti): authMode: "database" ile açılmış bir bağlantı yalnızca aynı kullanıcı adı ve aynı parolayla gelen isteğe verilir. sqlite dosyası WAL günlüğü ve normal kilit kipiyle açılır ve havuzlanır: işçiler aynı dosyayı birlikte kullanır, okuyucu yazıcıyı beklemez, yazıcılar Busy Timeout (bağlantı dizgisi, milisaniye, öndeğer 30000) kadar sırayla bekler. :memory: havuzlanmaz; kopmuş bağlantı havuza alınmaz.