SQL(1) parallel SQL(1)

sql - اجرای دستور روی یک پایگاه‌داده تعیین‌شده توسط dburl

sql [options] dburl [commands]

sql [options] dburl < commandfile

#!/usr/bin/sql --shebang [options] dburl

هدف GNU sql ارائه رابطی ساده و یکپارچه برای دسترسی به پایگاه‌های داده از طریق کلاینت‌های خط فرمانی گوناگون پایگاه‌های داده است. تاکنون تمرکز بر فراهم آوردن روشی مشترک برای مشخص کردن اطلاعات ورود به سیستم (پروتکل، نام کاربری، گذرواژه، نام میزبان و شماره پورت)، اندازه (اندازه پایگاه‌داده و جدول) و اجرای پرس‌وجوها (queries) بوده است.

آدرس‌دهی پایگاه‌داده با استفاده از یک DBURL انجام می‌شود. اگر commands مشخص نشود، پوسته تعاملی مربوط به آن پایگاه‌داده باز خواهد شد.

ابزار GNU sql معمولاً در ترکیب با GNU parallel به کار می‌رود.

یک DBURL دارای ساختار نحوی زیر است: [sql:]vendor:// [[user][:password]@][host][:port]/[database][?sqlquery]

بخش DBURL را در ادامه ببینید.

دستورات SQL برای اجرا. به انتهای هر آرگومان یک خط جدید (newline) افزوده خواهد شد.

مثال: "SELECT * FROM foo;" "SELECT * FROM bar;"

اگر آرگومان‌ها حاوی '\n' یا '\x0a' باشند، با یک خط جدید جایگزین می‌شوند:

مثال: "SELECT * FROM foo;\n SELECT * FROM bar;"

اگر دستوری مشخص نشود، دستورات SQL از صفحه‌کلید یا STDIN خوانده می‌شوند.

مثال: echo 'SELECT * FROM foo;' | sql mysql:///

خروجی CSV.
اندازه پایگاه‌داده. نمایش اندازه پایگاه‌داده بر روی دیسک. در Oracle این مورد نیازمند دسترسی خواندن جدول dba_data_files است - که کاربر system دارای این دسترسی است.
چاپ خلاصه‌ای از گزینه‌های GNU sql و خروج.
خروجی HTML. فعال‌سازی خروجی جدولی HTML.
خروجی JSON زیبا و خوانا (Pretty).
فهرست کردن پایگاه‌های داده (فضاهای جدول / table spaces) در سرور پایگاه‌داده.
نمایش فهرست پرس‌وجوهای در حال اجرا.
فهرست کردن جدول‌های موجود در پایگاه‌داده.
حذف سرایندها و پانویس‌ها و چاپ صرفاً تاپل‌ها (رکوردها). اشکال در Oracle: همچنان تعداد ردیف‌های یافت‌شده را چاپ می‌کند.
رشتهٔ پس از -p به عنوان آرگومان به برنامه اتصال پایگاه‌داده داده خواهد شد. در صورت استفاده از چند -p، آن‌ها با فاصله به یکدیگر متصل می‌شوند. مثال: ارسال '-U' و نام کاربری به برنامه:

عبارت -p "-U scott"; را می‌توان به صورت -p -U -p scott نیز نوشت.

دقت برچسب‌های زمانی (timestamps).

قالب برچسب‌های زمانی خروجی را مشخص کنید: rfc3339، h، m، s، ms، u یا ns.

۳ بار تلاش مجدد. نسخهٔ کوتاه‌شدهٔ --retries 3.
ntimes بار تلاش می‌کند. اگر برنامه کلاینت با خطا پایان یافت، دستور را مجدداً تکرار کن. مقدار پیش‌فرض --retries 1 است.
جداکننده فیلدها. استفاده از string به عنوان جداکننده میان ستون‌ها..IP --skip-first-line 9 از خط اول ورودی استفاده نکنید (هنگام فراخوانی با --shebang، توسط خود GNU sql استفاده می‌شود).
اندازهٔ جدول‌ها. اندازهٔ جدول‌های موجود در پایگاه داده را نمایش می‌دهد.
دستوری را که ارسال می‌شود چاپ کن.
نسخهٔ GNU sql را چاپ کن و خارج شو.
می‌توان GNU sql را به عنوان یک دستور شَبَنگ (#!) در خط نخست یک اسکریپت فراخوانی کرد. به این صورت:
#!/usr/bin/sql -Y mysql:///
SELECT * FROM foo;

برای کارکرد صحیح این قابلیت، --shebang یا -Y باید به عنوان نخستین گزینه تعیین شود.

یک DBURL دارای ساختار دستوری زیر است: [sql:]vendor:// [[user][:password]@][host][:port]/[database][?sqlquery]

برای محصور کردن نویسه‌های خاص، از کدگذاری درصدی (%-encoding) مشخص‌شده در http://tools.ietf.org/html/rfc3986#section-2.1 استفاده کنید (برای مثال، گذرواژه‌ای شامل '/' به صورت '%2F' نوشته خواهد شد).

csv:///%2Ftmp%2Fparallel-bug-56096/mytable csv:////tmp/parallel-bug-56096/mytable mysql://me@/me/ mysql:////

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

مثال‌ها:

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;

ارائه‌دهندگان پشتیبانی‌شده در حال حاضر:

  • MySQL (mysql) به همراه SSL (mysqls, mysqlssl)
  • Oracle (oracle, ora)
  • PostgreSQL (postgresql, pg, pgsql, postgres) به همراه SSL (postgresqlssl, pgs, pgsqlssl, postgresssl, pgssl, postgresqls, pgsqls, postgress)
  • SQLite2 (sqlite, sqlite2)
  • SQLite3 (sqlite3)
  • InfluxDB 1.x (influx, influxdb) به همراه SSL (influxdbssl, influxdbs, influxs, influxssl)

نام‌های مستعار باید با ':' آغاز شوند و از /etc/sql/aliases و ~/.sql/aliases خوانده می‌شوند. فایل ~/.sql/aliases شخصی کاربر فقط باید توسط خود کاربر قابل خواندن باشد.

نمونه‌ای از نام‌های مستعار:

: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;

ساده‌ترین کاربرد GNU sql دریافت یک خط فرمان تعاملی است:

sql sql:oracle://scott:tiger@ora.example.com/xe

اگر یک نام مستعار تنظیم کرده باشید، می‌توانید این‌گونه عمل کنید:

sql :myora.SS "اجرای یک پرس‌وجو" برای اجرای یک پرس‌وجو مستقیماً از خط فرمان:

sql :myalias "SELECT * FROM foo;"

اوراکل (Oracle) پس از هر دستور نیازمند خط جدید (newline) است. این کار را می‌توان بدین صورت انجام داد:

sql :myora "SELECT * FROM foo;" "SELECT * FROM bar;"

یا بدین صورت:

sql :myora "SELECT * FROM foo;\nSELECT * FROM bar;"

برای رونوشت گرفتن از یک پایگاه داده PostgreSQL، از pg_dump جهت تولید نسخه پشتیبان (dump) و از GNU sql برای وارد کردن (import) آن استفاده کنید:

pg_dump pg_database | sql pg://scott:tiger@pg.example.com/pgdb

با استفاده از GNU parallel، خالی کردن تمام جدول‌ها بدون حذف (drop) کردن آن‌ها آسان است:

sql -n mysql:/// 'show tables' | parallel sql mysql:/// DELETE FROM {};

برای حذف (drop) تمام جدول‌ها در یک پایگاه داده PostgreSQL دستور زیر را اجرا کنید:

sql -n pg:/// '\dt' | parallel --colsep '\|' -r sql pg:/// DROP TABLE {2};

به جای انجام دادن:

sql mysql:/// < sqlfile

می‌توانید sqlfile را با DBURL ترکیب کنید تا یک اسکریپت یونیکس بسازید. اسکریپتی به نام demosql ایجاد کنید:

#!/usr/bin/sql -Y mysql:///

SELECT * FROM foo;

سپس اجرا کنید:

chmod +x demosql; ./demosql

از گزینهٔ --colsep در GNU parallel برای جداسازی ستون‌ها استفاده کنید:

sql -s '\t' :myalias 'SELECT * FROM foo;' | parallel --colsep '\t' do_stuff {4} {1}

اگر دسترسی به پایگاه داده گاهی با خطا مواجه می‌شود، --retries می‌تواند کمک کند تا از موفقیت‌آمیز بودن اجرای پرس‌وجو اطمینان حاصل شود:

sql --retries 5 :myalias 'SELECT * FROM really_big_foo;'

نمایش اندازه پایگاه داده:

sql --db-size :myalias

فهرست کردن جدول‌ها:

sql --list-tables :myalias

فهرست کردن اندازه جدول‌ها:

sql --table-size :myalias

فهرست کردن فرآیندهای در حال اجرا:

sql --show-processlist :myalias

ابزار GNU sql بخشی از GNU parallel است. باگ‌ها را به <bug-parallel@gnu.org> گزارش کنید.

هنگام استفاده از GNU sql برای یک انتشار علمی، لطفاً به اثر زیر ارجاع دهید:

O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.

Copyright (C) 2008-2010 Ole Tange http://ole.tange.dk

Copyright (C) 2010-2026 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc.

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، بازتوزیع کرده یا تغییر دهید؛ چه نسخهٔ ۳ این مجوز، یا (به اختیار خودتان) هر نسخهٔ بالاتر بعدی.

این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.

شما باید به همراه این برنامه نسخه‌ای از «مجوز عمومی همگانی گنو» را دریافت کرده باشید. در غیر این صورت، http://www.gnu.org/licenses را ببینید.

اجازه داده می‌شود این مستندات را تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ ۱٫۳ یا هر نسخهٔ بالاترِ منتشرشده توسط بنیاد نرم‌افزارهای آزاد کپی کنید، توزیع نمایید و/یا تغییر دهید؛ بدون بخش‌های تغییرناپذیر، بدون متن‌های روی جلد و بدون متن‌های پشت جلد. نسخه‌ای از این مجوز در فایل LICENSES/GFDL-1.3-or-later.txt گنجانده شده است.

شما آزاد هستید:

به اشتراک بگذارید
کپی، توزیع و انتقال اثر
بازآفرینی کنید
تطبیق دادن اثر

تحت شرایط زیر:

انتساب
باید اثر را به شیوه‌ای که توسط نویسنده یا اعطاکنندهٔ مجوز مشخص شده انتساب دهید (اما نه به شکلی که نشان دهد آنان شما یا نحوهٔ استفادهٔ شما از اثر را تأیید می‌کنند).
اشتراک یکسان
اگر این اثر را تغییر دهید، تبدیل کنید، یا بر پایهٔ آن اثری بسازید، مجاز هستید اثر حاصل را تنها تحت همان مجوز، یا مجوزی مشابه یا سازگار توزیع کنید.

با در نظر داشتن اینکه:

چشم‌پوشی
هر یک از شرایط بالا در صورت کسب اجازه از صاحب حق نشر می‌تواند نادیده گرفته شود.
مالکیت عمومی
در مواردی که اثر یا هر یک از اجزای آن طبق قوانین قابل اعمال در مالکیت عمومی قرار داشته باشد، آن وضعیت به هیچ وجه تحت تأثیر این مجوز قرار نمی‌گیرد.
سایر حقوق
به هیچ وجه هیچ‌یک از حقوق زیر تحت تأثیر این مجوز قرار نمی‌گیرند:
  • حقوق استفادهٔ منصفانه یا معاملهٔ منصفانهٔ شما، یا سایر استثناها و محدودیت‌های قابل اعمال در قوانین حق نشر؛
  • حقوق معنوی نویسنده؛
  • حقوقی که سایر اشخاص ممکن است در خود اثر یا نحوهٔ استفاده از آن داشته باشند، مانند حقوق شهرت، تبلیغات یا حریم خصوصی.
توجه
برای هرگونه استفادهٔ مجدد یا توزیع، باید شرایط مجوز این اثر را برای دیگران مشخص و شفاف سازید.

نسخه‌ای از متن کامل مجوز در فایلی به نام cc-by-sa.txt گنجانده شده است..SH "وابستگی‌ها (DEPENDENCIES)" ابزار GNU sql از Perl استفاده می‌کند. اگر mysql نصب باشد، dburlهای MySQL کار خواهند کرد. اگر psql نصب باشد، dburlهای PostgreSQL کار خواهند کرد. اگر sqlite نصب باشد، dburlهای SQLite2 کار خواهند کرد. اگر sqlite3 نصب باشد، dburlهای SQLite3 کار خواهند کرد. اگر sqlplus نصب باشد، dburlهای Oracle کار خواهند کرد. اگر rlwrap نصب باشد، GNU sql دارای تاریخچه دستورات برای Oracle خواهد بود.

~/.sql/aliases - نام‌های مستعار خود کاربر با DBURLها

/etc/sql/aliases - نام‌های مستعار عمومی با DBURLها

mysql(1), psql(1), rlwrap(1), sqlite(1), sqlite3(1), sqlplus(1), influx(1)

2026-07-25 20260722