3.6 msql — komut satırı istemcisi

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

Yer:  Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 3. Komut satırı >

3.6 msql — komut satırı istemcisi

msql, MQL betiklerini ve tek tek deyimleri çalışan bir ajana veren komut satırı istemcisidir. İçinde motor yoktur: ajanın /ivedi oturum protokolüne (bkz. 5.4) WebSocket ile bağlanır, betiğin metnini gönderir; sonuçları, motorun konsol yazılarını ve hataları aynı bağlantıdan geri alır. Veritabanı kaydı, login ve rol tanımı, başlangıç betiği, IoT cihaz satırları, yükseltme betikleri — bu kılavuzda MQL ile yapılan her iş msql ile ve hizmet ayaktayken yapılır.

msql.exe (Linux'ta msql) ajanın yanında, aynı dizinde durur ve o dizindeki kitaplıkları (ICU) paylaşır; ajan dağıtımıyla birlikte kopyalanır. İki ön koşul vardır:

  • Ajanın yapılandırmasında IVEDI işlemcisi (/ivedi yolu) etkin olmalıdır — dağıtım conf'unda vardır.
  • Bağlanılan login MASTER'da SYSADMIN rolünde ya da SYSDBA olmalıdır (/ivedi kapısı). Bir veritabanı seçmek için login'in o veritabanında kullanıcı eşlemesi (CREATE USER … FOR LOGIN) bulunmalıdır.
msql [seçenekler] [veritabanı]
BağlantıAnlamı
-h, --host <ad>Ajanın adresi. Öndeğer localhost.
-p, --port <n>Kapı. Öndeğer 82.
-U, --user <login>MASTER login'i. Verilmezse IVD_USER ortam değişkeni, o da yoksa SYSDBA.
-W, --password <parola>Parola. Verilmezse IVD_PASSWORD ortam değişkeni; etkileşimli kipte sorulur, toplu kipte (-c / -f / stdin) zorunludur. Ortam değişkeni parolayı süreç listesinde ve kabuk geçmişinde göstermez.
-d, --database <ad>MASTER'da kayıtlı veritabanı; konumsal olarak da verilebilir. Verilmezse oturum MASTER'da açılır.
--sslBağlantı TLS ile (https / wss) kurulur.
--jsonÇerçeveler JSON taşır (öndeğer BSON).
--lang <dil>Motor iletilerinin dili (tr, en); verilmezse ajanın conf language'i.
--timeout <sn>Deyim süre sınırı, saniye; aşan deyim QUERY_CANCELED (SQLSTATE 57014) ile biter, oturum kullanılabilir kalır. 0 = sınırsız.
GirdiAnlamı
-c, --command <sql>Deyim ya da betik metni. Tekrarlanabilir; girdiler sırayla koşar.
-f, --file <dosya>Betik dosyası (UTF-8; baştaki BOM atılır). Tekrarlanabilir. Standart giriş borulanmışsa betik oradan okunur.
-D, --define <ad[=değer]>Betiğe önişlemci tanımı (#define) geçirir. Tekrarlanabilir.
--max-errors <n>Betiğin durmadan önce hoş göreceği hata sayısı. Öndeğer 0 — ilk hatada durur.
--stop-on-errorHata veren bir -c / -f girdisinden sonraki girdiler koşmaz.
--traceDeyim çalıştırmak yerine ajanın SQL izleme olaylarını Ctrl+C'ye kadar yazar: her olay bir özet satırı, deyim metni, depolama motoruna giden SQL (->) ve hata (!!).
--trace-filter <süzgeç>İzleme süzgeci: login=, database=, kind=, minms= (virgül ya da boşlukla ayrılır). --trace'i de açar.
--trace-count <n>İzleme n olaydan sonra biter.
ÇıktıAnlamı
-o, --output <dosya>Sonuçlar ve motorun konsol yazıları dosyaya gider (UTF-8, BOM'lu). Hatalar dosyaya yazılmaz, standart hatada kalır.
--format <biçim>table (öndeğer) · expanded · csv · json; aşağıda.
-q, --quietBağlantı ve özet iletileri yazılmaz.
--timingHer girdiden sonra geçen süre yazılır.
--stack-traceHata satırlarına sunucunun yerel yığın izi de eklenir (oturum open.stackTrace). Öndeğerde yalnız SQL çağrı yığını (At ... line) gelir; ajanın günlük düzeyi debug / diag ise iz istenmeden de gelir.
--history <dosya> · --no-historyEtkileşimli kipin geçmiş dosyası (öndeğer ~/.msql_history) · geçmiş tutulmaz.
-V, --version · --helpSürüm · yardım.
ÇıkışAnlamı
0Temiz koşu.
1En az bir deyim hata verdi.
2İstisna: bağlantı kurulamadı, dosya yok, geçersiz parametre.
Dikkat

-o dosyası hata metinlerini içermez: hatalar ve uyarılar standart hataya yazılır. Bir koşuyu betikten denetliyorsanız çıkış kodunu ve standart hatayı yakalayın; --max-errors vermeyin ki ilk hatada dursun.

3.6.1 PSQL hata ayıklayıcısı (msql)

Ajanın debugMode anahtarı açık ve login DEBUGGER rolünde (ya da SYSDBA) ise msql oturumu kendi deyimlerinin PSQL kodunu ayıklar (sözleşme: protokol belgesi §7.10). İstemci komutları etkileşimde ve -c ile toplu kipte işlenir:

KomutAnlamı
\debug on [all|uncaught] · \debug offHata ayıklamayı açar (istisnada durma kipiyle) / kapatır. \debug next bir sonraki deyimin ilk PSQL deyiminde durur; \debug exception none|all|uncaught istisnada durma kipini değiştirir; \debug status durumu ve durma noktalarını yazar.
\break ŞEMA.AD:SATIR [if <koşul>] · \break :SATIRDurma noktası: satır nesnenin CREATE metnine göre 1 tabanlı (motorun hata yığın izindeki methodline); :SATIR betik / EXECUTE BLOCK metnine göre. if koşulu PSQL ifadesidir, duran deyimin bağlamında TRUE ise durulur. Kapalıysa hata ayıklamayı açar.
\breaks · \unbreak [ŞEMA.AD[:SATIR]]Durma noktalarını listeler / kaldırır (parametresiz: hepsini).

Deyim bir durağa gelince msql konumu yazar (-- debugger stopped: breakpoint at procedure APP.P line 4, istisnada -- exception ... satırı) ve (dbg) istemine geçer; komutlar standart girdiden okunur, boş satır sonuncuyu yineler: n üstünden adım, s içine, o dışına, c devam, q deyimi sonlandır (DEBUG_TERMINATED), bt çağrı yığını, v [params|locals|returns|new|old|exception] değişkenler, p ifade değer (v, new.x, v * 10 + a), b ŞEMA.AD:SATIR [if koşul] yeni durma noktası, h yardım. Toplu kipte girdi biterse deyim kendiliğinden sürer. Hata ayıklama açıkken Ctrl+C deyimi iptal etmez, bir sonraki PSQL deyiminde durdurur. Durak boyunca işlem ve kilitler açık kalır, deyim süre sınırı askıdadır.

3.6.2 Sonuçlar, konsol yazıları ve biçimler

Sonuç kümeleri deyim deyim, hazır oldukça gelir. Motorun konsol yazıları (Console.PrintF, #OUTPUT) komut koşarken ajanın standart çıktısına değil istemciye gelir ve sonuçlarla birlikte ekrana ya da -o dosyasına yazılır. Biçimler (--format, etkileşimde \f):

BiçimGörünüm
tablepsql benzeri:  KOLON | KOLON başlığı, ------+------ ayıracı, satırlar, sonda (N rows).
expandedHer satır bir -[ RECORD n ]- başlığı ve altında ad | değer satırları (etkileşimde \x).
csvRFC 4180 tırnaklaması; NULL boş alan.
jsonHer sonuç kümesi bir nesne dizisi.

Hatalar ve uyarılar standart hataya şu biçimde yazılır (renk yalnız standart hata bir uçbirimken; Windows konsolunda ANSI yorumlaması msql tarafından açılır, NO_COLOR ortam değişkeni rengi her yerde kapatır). Bütün metin UTF-8'dir: Windows konsolunda msql kod sayfasını her iki yönde UTF-8'e alır, yönlendirilmiş çıktı UTF-8 baytlarıdır (BOM yok):

ERROR: <ileti>
  file: client:C:\kurulum\kayit.sql(12,5)
  sqlState: 42601
WARNING: <ileti>
  lineNum: 3, charPos: 1

file: satırı betik dosyasından gelen bir deyimde yol, satır ve sütunu verir; -c ile verilen metinde onun yerine lineNum / charPos yazılır.

3.6.3 Etkileşimli kip

-c, -f ve borulanmış stdin yoksa msql etkileşimli bir oturum açar: geçmişi, tamamlaması ve çok satırlı düzenlemesi olan bir satır düzenleyici. Deyimler ; ile gönderilir; PSQL gövdeleri (execute block, create procedure / function / trigger / package / type / metacommand / sqlmacro / operator, declare) kapanan END'e kadar bekletilir. SET TERM x; yalnız istemcinin gönderme kuralını değiştirir, motora gitmez. Ctrl+C koşan deyimi iptal eder (POST /ivedi/cancel); oturum açık kalır.

Satır başındaki \ad arg … satırları motorun meta-komutlarıdır ve sunucuda koşar: \help listeler; \d [nesne], \dt, \dv, \df, \dp, \dn, \l yerleşiktir, CREATE METACOMMAND ile yenileri tanımlanır (SQL kılavuzu). İstemcinin kendisinde işlenenler:

KomutNe yapar
\q, \quit, exit, quitÇıkış (exit / quit tek başına yazıldığında; sonda ; olabilir).
\h, \helpİstemci komutlarının yardımı.
\timing [on|off]Deyim sürelerini göster.
\x [on|off]Genişletilmiş satır gösterimi (expanded).
\f [biçim]Çıktı biçimi: table | expanded | csv | json.
\o [dosya]Çıktıyı dosyaya yönlendir; dosyasız çağrı ekrana döndürür.
\i dosyaBetik dosyasını çalıştır.
\c [veritabanı]Veritabanı değiştir (yeniden bağlanır).
\eTamponu düzenleyicide aç ve çalıştır (EDITOR; yoksa Windows'ta notepad, Linux'ta vi).
\trace [süzgeç]SQL izleme olaylarını Ctrl+C'ye kadar yaz (login= database= kind= minms=); --trace ile aynı.

3.6.4 Dosyalar: istemcinin mi, sunucunun mu

msql betiğin metnini gönderir ve kaynak adı olarak client:<mutlak yol> verir. Betikteki #include (ve ALTER DATABASE … SET STARTUP SCRIPT FROM FILE) bu ada göre, yani istemcinin dosya sisteminde çözülür: ajan dosyayı aynı bağlantı üzerinden msql'den ister. Kaynak açıkça da seçilebilir: #include 'client:<yol>' istemcinin, #include 'server:<yol>' sunucunun dosya sistemidir; öneksiz bir yol, içinde bulunduğu dosyanın kaynağını miras alır (istemciden gelen betiğin göreli include'ları istemciden, sunucudaki bir betiğinkiler sunucudan). Çalışma zamanında açılan dosyalar bu kuralın dışındadır: öneksiz yolları her zaman sunucunun yollarıdır (UPGRADE LEVEL … FROM '<paket>', EXPORT LEVEL … TO, BACKUP TO, CREATE EXTERNAL TABLE). Seviye paketleri açık 'client:<yol>' önekiyle istemci makinesinde kalabilir: UPGRADE LEVEL … FROM 'client:…' paketi msql'den okur, EXPORT LEVEL … TO 'client:…' ona yazar.

İstemciden #include edilen dosya 4 MB'lık parçalarla okunur; dosya boyu sınırı yoktur, ajanın belleğinde aynı anda bir parça durur. msql 16 MB'ı aşan bir -f betiğini de bu yoldan gönderir; hata satırlarındaki dosya adı ve satır numarası değişmez.

3.6.5 Örnekler

-- Kurulum betigini calisan hizmete ver; sonuclar dosyaya, hatalar stderr'e
msql -U SYSDBA -W masterkey -f kurulum.sql -o kurulum.out.sql 2> kurulum.err
echo %ERRORLEVEL%

-- Parolayi ortam degiskeninden al, tek deyim kostur
set IVD_PASSWORD=masterkey
msql -U SYSDBA -c "select ivd$object_name from master.sys.ivd$objects where ivd$type = 'DATABASE' and ivd$object_id > 0"

-- Etkilesimli oturum, NETSIM veritabani secili
msql -U SYSDBA NETSIM
SYSDBA parolasi:
NETSIM=> \dt
NETSIM=> select count(*) from ns_firma;
NETSIM=> \help
NETSIM=> \q