.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "SQL 1" .TH SQL 1 2026-07-25 20260722 parallel .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" sql \- اجرای دستور روی یک پایگاه‌داده تعیین‌شده توسط dburl .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBsql\fR [options] \fIdburl\fR [\fIcommands\fR] .PP \&\fBsql\fR [options] \fIdburl\fR < commandfile .PP \&\fB#!/usr/bin/sql\fR \fB\-\-shebang\fR [options] \fIdburl\fR .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" هدف GNU \fBsql\fR ارائه رابطی ساده و یکپارچه برای دسترسی به پایگاه‌های داده از طریق کلاینت‌های خط فرمانی گوناگون پایگاه‌های داده است. تاکنون تمرکز بر فراهم آوردن روشی مشترک برای مشخص کردن اطلاعات ورود به سیستم (پروتکل، نام کاربری، گذرواژه، نام میزبان و شماره پورت)، اندازه (اندازه پایگاه‌داده و جدول) و اجرای پرس‌وجوها (queries) بوده است. .PP آدرس‌دهی پایگاه‌داده با استفاده از یک DBURL انجام می‌شود. اگر \fIcommands\fR مشخص نشود، پوسته تعاملی مربوط به آن پایگاه‌داده باز خواهد شد. .PP ابزار GNU \fBsql\fR معمولاً در ترکیب با GNU \fBparallel\fR به کار می‌رود. .IP \fIdburl\fR 9 .IX Item "dburl" یک DBURL دارای ساختار نحوی زیر است: [sql:]vendor:// [[user][:password]@][host][:port]/[database][?sqlquery] .Sp بخش DBURL را در ادامه ببینید. .IP \fIcommands\fR 9 .IX Item "commands" دستورات SQL برای اجرا. به انتهای هر آرگومان یک خط جدید (newline) افزوده خواهد شد. .Sp مثال: "SELECT * FROM foo;" "SELECT * FROM bar;" .Sp اگر آرگومان‌ها حاوی \*(Aq\en\*(Aq یا \*(Aq\ex0a\*(Aq باشند، با یک خط جدید جایگزین می‌شوند: .Sp مثال: "SELECT * FROM foo;\en SELECT * FROM bar;" .Sp اگر دستوری مشخص نشود، دستورات SQL از صفحه‌کلید یا STDIN خوانده می‌شوند. .Sp مثال: echo \*(AqSELECT * FROM foo;\*(Aq | sql mysql:/// .IP \fB\-\-csv\fR 9 .IX Item "--csv" خروجی CSV. .IP \fB\-\-db\-size\fR 9 .IX Item "--db-size" .PD 0 .IP \fB\-\-dbsize\fR 9 .IX Item "--dbsize" .PD اندازه پایگاه‌داده. نمایش اندازه پایگاه‌داده بر روی دیسک. در Oracle این مورد نیازمند دسترسی خواندن جدول \fIdba_data_files\fR است \- که کاربر \fIsystem\fR دارای این دسترسی است. .IP \fB\-\-help\fR 9 .IX Item "--help" .PD 0 .IP \fB\-h\fR 9 .IX Item "-h" .PD چاپ خلاصه‌ای از گزینه‌های GNU \fBsql\fR و خروج. .IP \fB\-\-html\fR 9 .IX Item "--html" خروجی HTML. فعال‌سازی خروجی جدولی HTML. .IP \fB\-\-json\fR 9 .IX Item "--json" .PD 0 .IP \fB\-\-pretty\fR 9 .IX Item "--pretty" .PD خروجی JSON زیبا و خوانا (Pretty). .IP \fB\-\-list\-databases\fR 9 .IX Item "--list-databases" .PD 0 .IP \fB\-\-listdbs\fR 9 .IX Item "--listdbs" .IP \fB\-\-show\-databases\fR 9 .IX Item "--show-databases" .IP \fB\-\-showdbs\fR 9 .IX Item "--showdbs" .PD فهرست کردن پایگاه‌های داده (فضاهای جدول / table spaces) در سرور پایگاه‌داده. .IP \fB\-\-listproc\fR 9 .IX Item "--listproc" .PD 0 .IP \fB\-\-proclist\fR 9 .IX Item "--proclist" .IP \fB\-\-show\-processlist\fR 9 .IX Item "--show-processlist" .PD نمایش فهرست پرس‌وجوهای در حال اجرا. .IP \fB\-\-list\-tables\fR 9 .IX Item "--list-tables" .PD 0 .IP \fB\-\-show\-tables\fR 9 .IX Item "--show-tables" .IP \fB\-\-table\-list\fR 9 .IX Item "--table-list" .PD فهرست کردن جدول‌های موجود در پایگاه‌داده. .IP \fB\-\-noheaders\fR 9 .IX Item "--noheaders" .PD 0 .IP \fB\-\-no\-headers\fR 9 .IX Item "--no-headers" .IP \fB\-n\fR 9 .IX Item "-n" .PD حذف سرایندها و پانویس‌ها و چاپ صرفاً تاپل‌ها (رکوردها). اشکال در Oracle: همچنان تعداد ردیف‌های یافت‌شده را چاپ می‌کند. .IP "\fB\-p\fR \fIpass\-through\fR" 9 .IX Item "-p pass-through" رشتهٔ پس از \-p به عنوان آرگومان به برنامه اتصال پایگاه‌داده داده خواهد شد. در صورت استفاده از چند \-p، آن‌ها با فاصله به یکدیگر متصل می‌شوند. مثال: ارسال \*(Aq\-U\*(Aq و نام کاربری به برنامه: .Sp عبارت \&\fI\-p "\-U scott"\fR را می‌توان به صورت \fI\-p \-U \-p scott\fR نیز نوشت. .IP "\fB\-\-precision\fR <\fIrfc3339|h|m|s|ms|u|ns\fR>" 9 .IX Item "--precision " دقت برچسب‌های زمانی (timestamps). .Sp قالب برچسب‌های زمانی خروجی را مشخص کنید: rfc3339، h، m، s، ms، u یا ns. .IP \fB\-r\fR 9 .IX Item "-r" ۳ بار تلاش مجدد. نسخهٔ کوتاه‌شدهٔ \fI\-\-retries 3\fR. .IP "\fB\-\-retries\fR \fIntimes\fR" 9 .IX Item "--retries ntimes" \fIntimes\fR بار تلاش می‌کند. اگر برنامه کلاینت با خطا پایان یافت، دستور را مجدداً تکرار کن. مقدار پیش‌فرض \fI\-\-retries 1\fR است. .IP "\fB\-\-sep\fR \fIstring\fR" 9 .IX Item "--sep string" .PD 0 .IP "\fB\-s\fR \fIstring\fR" 9 .IX Item "-s string" .PD جداکننده فیلدها. استفاده از \fIstring\fR به عنوان جداکننده میان ستون‌ها..IP \fB\-\-skip\-first\-line\fR 9 .IX Item "--skip-first-line" از خط اول ورودی استفاده نکنید (هنگام فراخوانی با \fB\-\-shebang\fR، توسط خود GNU \fBsql\fR استفاده می‌شود). .IP \fB\-\-table\-size\fR 9 .IX Item "--table-size" .PD 0 .IP \fB\-\-tablesize\fR 9 .IX Item "--tablesize" .PD اندازهٔ جدول‌ها. اندازهٔ جدول‌های موجود در پایگاه داده را نمایش می‌دهد. .IP \fB\-\-verbose\fR 9 .IX Item "--verbose" .PD 0 .IP \fB\-v\fR 9 .IX Item "-v" .PD دستوری را که ارسال می‌شود چاپ کن. .IP \fB\-\-version\fR 9 .IX Item "--version" .PD 0 .IP \fB\-V\fR 9 .IX Item "-V" .PD نسخهٔ GNU \fBsql\fR را چاپ کن و خارج شو. .IP \fB\-\-shebang\fR 9 .IX Item "--shebang" .PD 0 .IP \fB\-Y\fR 9 .IX Item "-Y" .PD می‌توان GNU \fBsql\fR را به عنوان یک دستور شَبَنگ (#!) در خط نخست یک اسکریپت فراخوانی کرد. به این صورت: .Sp .Vb 1 \& #!/usr/bin/sql \-Y mysql:/// \& \& SELECT * FROM foo; .Ve .Sp برای کارکرد صحیح این قابلیت، \fB\-\-shebang\fR یا \fB\-Y\fR باید به عنوان نخستین گزینه تعیین شود. .SH DBURL .IX Header "DBURL" یک DBURL دارای ساختار دستوری زیر است: [sql:]vendor:// [[user][:password]@][host][:port]/[database][?sqlquery] .PP برای محصور کردن نویسه‌های خاص، از کدگذاری درصدی (%\-encoding) مشخص‌شده در http://tools.ietf.org/html/rfc3986#section\-2.1 استفاده کنید (برای مثال، گذرواژه‌ای شامل \*(Aq/\*(Aq به صورت \*(Aq%2F\*(Aq نوشته خواهد شد). .PP csv:///%2Ftmp%2Fparallel\-bug\-56096/mytable csv:////tmp/parallel\-bug\-56096/mytable mysql://me@/me/ mysql://// .PP sqlite3:///%2Frun%2Fshm%2Fparallel.db sqlite3:///%2Frun%2Fshm%2Fparallel.db/table sqlite:///%2Ftmp%2Ffile.sqlite?SELECT csv:///%2Ftmp%2Fparallel\-CSV/OK csv:///%2Fmust%2Ffail/fail sqlite3:///%2Frun%2Fshm%2Fparallel.db .PP مثال‌ها: .PP .Vb 8 \& mysql://scott:tiger@my.example.com/mydb \& influxdb://scott:tiger@influxdb.example.com/foo \& sql:oracle://scott:tiger@ora.example.com/xe \& postgresql://scott:tiger@pg.example.com/pgdb \& pg:/// \& postgresqlssl://scott@pg.example.com:3333/pgdb \& sql:sqlite2:////tmp/db.sqlite?SELECT * FROM foo; \& sqlite3:///../db.sqlite3?SELECT%20*%20FROM%20foo; .Ve .PP ارائه‌دهندگان پشتیبانی‌شده در حال حاضر: .IP \(bu 2 MySQL (mysql) به همراه SSL (mysqls, mysqlssl) .IP \(bu 2 Oracle (oracle, ora) .IP \(bu 2 PostgreSQL (postgresql, pg, pgsql, postgres) به همراه SSL (postgresqlssl, pgs, pgsqlssl, postgresssl, pgssl, postgresqls, pgsqls, postgress) .IP \(bu 2 SQLite2 (sqlite, sqlite2) .IP \(bu 2 SQLite3 (sqlite3) .IP \(bu 2 InfluxDB 1.x (influx, influxdb) به همراه SSL (influxdbssl, influxdbs, influxs, influxssl) .PP نام‌های مستعار باید با \*(Aq:\*(Aq آغاز شوند و از /etc/sql/aliases و ~/.sql/aliases خوانده می‌شوند. فایل ~/.sql/aliases شخصی کاربر فقط باید توسط خود کاربر قابل خواندن باشد. .PP نمونه‌ای از نام‌های مستعار: .PP .Vb 12 \& :myalias1 pg://scott:tiger@pg.example.com/pgdb \& :myalias2 ora://scott:tiger@ora.example.com/xe \& # Short form of mysql://\`whoami\`:nopassword@localhost:3306/\`whoami\` \& :myalias3 mysql:/// \& # Short form of mysql://\`whoami\`:nopassword@localhost:33333/mydb \& :myalias4 mysql://:33333/mydb \& # Alias for an alias \& :m :myalias4 \& # the sortest alias possible \& : sqlite2:////tmp/db.sqlite \& # Including an SQL query \& :query sqlite:////tmp/db.sqlite?SELECT * FROM foo; .Ve .SH "مثال‌ها (EXAMPLES)" .IX Header "EXAMPLES" .SS "دریافت خط فرمان تعاملی" .IX Subsection "Get an interactive prompt" ساده‌ترین کاربرد GNU \fBsql\fR دریافت یک خط فرمان تعاملی است: .PP \&\fBsql sql:oracle://scott:tiger@ora.example.com/xe\fR .PP اگر یک نام مستعار تنظیم کرده باشید، می‌توانید این‌گونه عمل کنید: .PP \&\fBsql :myora\fR.SS "اجرای یک پرس‌وجو" .IX Subsection "Run a query" برای اجرای یک پرس‌وجو مستقیماً از خط فرمان: .PP \&\fBsql :myalias "SELECT * FROM foo;"\fR .PP اوراکل (Oracle) پس از هر دستور نیازمند خط جدید (newline) است. این کار را می‌توان بدین صورت انجام داد: .PP \&\fBsql :myora "SELECT * FROM foo;" "SELECT * FROM bar;"\fR .PP یا بدین صورت: .PP \&\fBsql :myora "SELECT * FROM foo;\enSELECT * FROM bar;"\fR .SS "رونوشت از یک پایگاه داده PostgreSQL" .IX Subsection "Copy a PostgreSQL database" برای رونوشت گرفتن از یک پایگاه داده PostgreSQL، از pg_dump جهت تولید نسخه پشتیبان (dump) و از GNU \&\fBsql\fR برای وارد کردن (import) آن استفاده کنید: .PP \&\fBpg_dump pg_database | sql pg://scott:tiger@pg.example.com/pgdb\fR .SS "خالی کردن تمام جدول‌ها در یک پایگاه داده MySQL" .IX Subsection "Empty all tables in a MySQL database" با استفاده از GNU \fBparallel\fR، خالی کردن تمام جدول‌ها بدون حذف (drop) کردن آن‌ها آسان است: .PP \&\fBsql \-n mysql:/// \*(Aqshow tables\*(Aq | parallel sql mysql:/// DELETE FROM {};\fR .SS "حذف تمام جدول‌ها در یک پایگاه داده PostgreSQL" .IX Subsection "Drop all tables in a PostgreSQL database" برای حذف (drop) تمام جدول‌ها در یک پایگاه داده PostgreSQL دستور زیر را اجرا کنید: .PP \&\fBsql \-n pg:/// \*(Aq\edt\*(Aq | parallel \-\-colsep \*(Aq\e|\*(Aq \-r sql pg:/// DROP TABLE {2};\fR .SS "اجرا به عنوان یک اسکریپت" .IX Subsection "Run as a script" به جای انجام دادن: .PP \&\fBsql mysql:/// < sqlfile\fR .PP می‌توانید sqlfile را با DBURL ترکیب کنید تا یک اسکریپت یونیکس بسازید. اسکریپتی به نام \fIdemosql\fR ایجاد کنید: .PP \&\fB#!/usr/bin/sql \-Y mysql:///\fR .PP \&\fBSELECT * FROM foo;\fR .PP سپس اجرا کنید: .PP \&\fBchmod +x demosql; ./demosql\fR .SS "استفاده از \-\-colsep برای پردازش چندین ستون" .IX Subsection "Use --colsep to process multiple columns" از گزینهٔ \fB\-\-colsep\fR در GNU \fBparallel\fR برای جداسازی ستون‌ها استفاده کنید: .PP \&\fBsql \-s \*(Aq\et\*(Aq :myalias \*(AqSELECT * FROM foo;\*(Aq | parallel \-\-colsep \*(Aq\et\*(Aq do_stuff {4} {1}\fR .SS "تلاش مجدد در صورت ناموفق بودن اتصال" .IX Subsection "Retry if the connection fails" اگر دسترسی به پایگاه داده گاهی با خطا مواجه می‌شود، \fB\-\-retries\fR می‌تواند کمک کند تا از موفقیت‌آمیز بودن اجرای پرس‌وجو اطمینان حاصل شود: .PP \&\fBsql \-\-retries 5 :myalias \*(AqSELECT * FROM really_big_foo;\*(Aq\fR .SS "دریافت اطلاعات درباره سامانه پایگاه داده در حال اجرا" .IX Subsection "Get info about the running database system" نمایش اندازه پایگاه داده: .PP \&\fBsql \-\-db\-size :myalias\fR .PP فهرست کردن جدول‌ها: .PP \&\fBsql \-\-list\-tables :myalias\fR .PP فهرست کردن اندازه جدول‌ها: .PP \&\fBsql \-\-table\-size :myalias\fR .PP فهرست کردن فرآیندهای در حال اجرا: .PP \&\fBsql \-\-show\-processlist :myalias\fR .SH "گزارش باگ‌ها (REPORTING BUGS)" .IX Header "REPORTING BUGS" ابزار GNU \fBsql\fR بخشی از GNU \fBparallel\fR است. باگ‌ها را به گزارش کنید. .SH "نویسنده (AUTHOR)" .IX Header "AUTHOR" هنگام استفاده از GNU \fBsql\fR برای یک انتشار علمی، لطفاً به اثر زیر ارجاع دهید: .PP O. Tange (2011): GNU SQL \- A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29\-32. .PP Copyright (C) 2008\-2010 Ole Tange http://ole.tange.dk .PP Copyright (C) 2010\-2026 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc. .SH "مجوز (LICENSE)" .IX Header "LICENSE" این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، بازتوزیع کرده یا تغییر دهید؛ چه نسخهٔ ۳ این مجوز، یا (به اختیار خودتان) هر نسخهٔ بالاتر بعدی. .PP این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید. .PP شما باید به همراه این برنامه نسخه‌ای از «مجوز عمومی همگانی گنو» را دریافت کرده باشید. در غیر این صورت، را ببینید. .SS "مجوز مستندات ۱" .IX Subsection "Documentation license I" اجازه داده می‌شود این مستندات را تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ ۱٫۳ یا هر نسخهٔ بالاترِ منتشرشده توسط بنیاد نرم‌افزارهای آزاد کپی کنید، توزیع نمایید و/یا تغییر دهید؛ بدون بخش‌های تغییرناپذیر، بدون متن‌های روی جلد و بدون متن‌های پشت جلد. نسخه‌ای از این مجوز در فایل LICENSES/GFDL\-1.3\-or\-later.txt گنجانده شده است. .SS "مجوز مستندات ۲" .IX Subsection "Documentation license II" شما آزاد هستید: .IP "\fBبه اشتراک بگذارید\fR" 9 .IX Item "to Share" کپی، توزیع و انتقال اثر .IP "\fBبازآفرینی کنید\fR" 9 .IX Item "to Remix" تطبیق دادن اثر .PP تحت شرایط زیر: .IP \fBانتساب\fR 9 .IX Item "Attribution" باید اثر را به شیوه‌ای که توسط نویسنده یا اعطاکنندهٔ مجوز مشخص شده انتساب دهید (اما نه به شکلی که نشان دهد آنان شما یا نحوهٔ استفادهٔ شما از اثر را تأیید می‌کنند). .IP "\fBاشتراک یکسان\fR" 9 .IX Item "Share Alike" اگر این اثر را تغییر دهید، تبدیل کنید، یا بر پایهٔ آن اثری بسازید، مجاز هستید اثر حاصل را تنها تحت همان مجوز، یا مجوزی مشابه یا سازگار توزیع کنید. .PP با در نظر داشتن اینکه: .IP \fBچشم‌پوشی\fR 9 .IX Item "Waiver" هر یک از شرایط بالا در صورت کسب اجازه از صاحب حق نشر می‌تواند نادیده گرفته شود. .IP "\fBمالکیت عمومی\fR" 9 .IX Item "Public Domain" در مواردی که اثر یا هر یک از اجزای آن طبق قوانین قابل اعمال در مالکیت عمومی قرار داشته باشد، آن وضعیت به هیچ وجه تحت تأثیر این مجوز قرار نمی‌گیرد. .IP "\fBسایر حقوق\fR" 9 .IX Item "Other Rights" به هیچ وجه هیچ‌یک از حقوق زیر تحت تأثیر این مجوز قرار نمی‌گیرند: .RS 9 .IP \(bu 9 حقوق استفادهٔ منصفانه یا معاملهٔ منصفانهٔ شما، یا سایر استثناها و محدودیت‌های قابل اعمال در قوانین حق نشر؛ .IP \(bu 9 حقوق معنوی نویسنده؛ .IP \(bu 9 حقوقی که سایر اشخاص ممکن است در خود اثر یا نحوهٔ استفاده از آن داشته باشند، مانند حقوق شهرت، تبلیغات یا حریم خصوصی. .RE .RS 9 .RE .IP \fBتوجه\fR 9 .IX Item "Notice" برای هرگونه استفادهٔ مجدد یا توزیع، باید شرایط مجوز این اثر را برای دیگران مشخص و شفاف سازید. .PP نسخه‌ای از متن کامل مجوز در فایلی به نام cc\-by\-sa.txt گنجانده شده است..SH "وابستگی‌ها (DEPENDENCIES)" .IX Header "DEPENDENCIES" ابزار GNU \fBsql\fR از Perl استفاده می‌کند. اگر \fBmysql\fR نصب باشد، dburlهای MySQL کار خواهند کرد. اگر \fBpsql\fR نصب باشد، dburlهای PostgreSQL کار خواهند کرد. اگر \&\fBsqlite\fR نصب باشد، dburlهای SQLite2 کار خواهند کرد. اگر \fBsqlite3\fR نصب باشد، dburlهای SQLite3 کار خواهند کرد. اگر \fBsqlplus\fR نصب باشد، dburlهای Oracle کار خواهند کرد. اگر \fBrlwrap\fR نصب باشد، GNU \fBsql\fR دارای تاریخچه دستورات برای Oracle خواهد بود. .SH "فایل‌ها (FILES)" .IX Header "FILES" ~/.sql/aliases \- نام‌های مستعار خود کاربر با DBURLها .PP /etc/sql/aliases \- نام‌های مستعار عمومی با DBURLها .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fBmysql\fR(1), \fBpsql\fR(1), \fBrlwrap\fR(1), \fBsqlite\fR(1), \fBsqlite3\fR(1), \&\fBsqlplus\fR(1), \fBinflux\fR(1)