نمیدونم چرا کتابهایی با عناوینی مثل php و mysql به کرات در دنیا چاپ شدهاند. البته خود جوابش معلومه، ولی جای بسی تأسف داره که اینقدر دنیای وب رو کوچک فرض کرد که یک mysql و shared hosting…. در یک بازه زمانی NoSQL ها(Not Only SQL ها) فراگیر شدند و کلی اتفاقات عجیب و غریب دیگه افتاد. یک Database Programmer براش نباید اهمیت داشته باشه که backend قضیه چیه، البته، در مورد چند چیز تا حدی فرق میکنه مثل Data Type ها، نوشتن Transaction ، Trigger و دستورات sql ی خود backend پشتیبانی میکنه. اگر مقادیر فرضی رو کنار بگذاریم واقعاً backend هیچ فرقی نمیکنه و کاربرد در مقیاسه که خیلی مهمه.
یکی از Database server هایی که دنیا رو تکون داد و زمانی که مایکروسافت Skype رو نخریده بود،Skype با ۹ میلیون کاربر online از PostgreSQL استفاده میکرد.
در این مقاله نه قصد benchmark دارم نه قصد پشتیبانی از نرمافزار خاصی، بلکه میخوام کمکی کرده باشم به اونهایی که میخوان بیان سمت PostgreSQL ، و شل اون رو براشون توضیح بدم.
البته یه config اولیه هم داره که کلاً همه چی رو کاربر از ابتدا باید بسازه مثل MySQL نیست.
۱. config اولیه
در ابتدا با کاربر root دستور زیر را وارد نمایید:
1 2 3 |
root@debian:/home/mohsen# su – postgres postgres@debian:~$ pwd /var/lib/postgresql |
postgresql کاربری دارد که همه کارها با آن انجام میشود.
نکته: یادتان نرود از – استفاده نمایید.
نکته: در هر سیستم میتواند چند PostgresSQL از طریق repo نصب شود به ۲ مسیر زیر دقت نمایید :
1 2 3 4 |
postgres@debian:~$ ls -dl /etc/postgresql/9.4/main/ drwxr-xr-x 2 postgres postgres 4096 Mar 25 07:55 /etc/postgresql/9.4/main/ postgres@debian:~$ ls -dl /var/lib/postgresql/9.4/main/ drwx------ 18 postgres postgres 4096 Mar 25 07:54 /var/lib/postgresql/9.4/main/ |
تا همین چند وقت پیش configuration فایلهایی که در /etc/ مشاهده میکنید در /var/lib/postgresql/ بودند. اما مقصور از این ۲ دایرکتوری ورژنی است که به صورت دایرکتوری درآمده است. اگر آن 9.4 نسخه دیگری باشد شما میتوانید نسخه دیگری هم داشته باشید. درواقع شما آن را یک متغیر بگیرید.
۱.۱ فایل pg_hba.conf:
همه چیز با این فایل شروع میشود. نام کاربران، database ها و خیلی از مسایل امنیتی در این فایل نوشته میشود.
نکته: بنا به سیستمهای قدیمی ممکن است در /var/lib/postgresql/ باشد و اگر نه در /etc/postgresql/ میباشد. باز این موضوع تا حدی به سلیقه شخصیpackage maintenance توزیع شما برمیگردد.
این فایل به ۵ ستون اصلی تقسیم میگردد:
-
ستون اول: نوع connection کاربر به Database شما میباشد.
-
ستون دوم: نام Database شما میباشد.
-
ستون سوم: نام کاربری میباشد که برای Database تعریف کردید.
-
ستون چهارم: آدرسی که کاربر از آن میتواند به این database متصل گردد.
-
ستون پنچم: که آن را method نامیدهاند درواقع نوع Authentication است.
با دو دستور زیر database و کاربر ایجاد مینماییم:
1 2 |
postgres@debian:/etc/postgresql/9.4/main$ createdb chpert.net postgres@debian:/etc/postgresql/9.4/main$ createuser chpert.net |
سپس آنها را وارد pg_hba.conf میکنیم:
1 |
host chpert.net chpert.net 127.0.0.1/32 trust |
نکته: البته من نکات امنیتی را رعایت نکرده و صرفاً قصد آموزش دارم.
سپس:
1 |
root@debian:/home/mohsen# service postgresql reload |
سپس با همان کاربر postgres وارد شل psql میشویم:
1 2 3 4 5 |
postgres@debian:/etc/postgresql/9.4/main$ psql psql (9.4.1) Type "help" for help. postgres=# |
اینجا نقطه آغاز همه چیز است.
۲. شل PostgreSQL
حال که همه چیز آماده شد باید بدانیم اینجا MySQL نیست و دستوراتی همچون use وجود خارجی ندارند. اما مجموعه دستوراتی وجود دارند که با backslash شروع میشوند. به عنوا مثال \ را همرا ه با ۲ بار کلید TAB فشرده و خروجی را مشاهده نمایید:
1 2 3 4 5 6 7 8 9 10 |
postgres=# \ \! \da \dew \dL \du \gset \lo_list \r \x \a \db \df \dn \dv \h \lo_unlink \set \z \C \dc \dF \do \dx \H \o \sf \cd \dC \dFd \dp \e \help \p \t \connect \dd \dFp \drds \echo \i \password \T \conninfo \dD \dFt \ds \ef \ir \prompt \timing \copy \des \dg \dS \encoding \l \pset \unset \copyright \det \di \dt \f \lo_export \q \w \d \deu \dl \dT \g \lo_import \qecho \watch |
اولین گزینه l\ میباشد که بانکها را لیست میکند:
1 2 3 4 5 6 7 8 9 10 11 |
chpert.net=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+----------+----------+-------------+-------------+----------------------- chpert.net | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows) |
حال میتوانید به یک بانک وصل شوید:
1 2 3 |
postgres=# \c chpert.net You are now connected to database "chpert.net" as user "postgres". chpert.net=# |
نکته: برای اینکه کل دستورات این شل را ببینید میتوانید از h\ استفاده نمایید. که مخالف فشردن \ همراه ۲ بار TAB میباشد. این دو خروجیهای متفاوتی دارند. اولی دستوراتی همچون CREATE TABLE و دومی تمام shell command ها همانند dd\ یا c\ زا نمایش میدهد.
بیایید یک table بسازیم:
1 2 |
chpert.net=# create table TEST1(ID serial not null primary key , NAME varchar(20) ); CREATE TABLE |
کلمه srial به معنای همان auto increment میباشد. و بقیه قضایا:
1 2 3 4 5 6 |
chpert.net=# \dt List of relations Schema | Name | Type | Owner --------+-------+-------+---------- public | test1 | table | postgres (1 row) |
هدف از این مطلب به آشنایی اولیه برای کارکردن با postgresql بود که امیدوارم به درد خورده باشه.
بابت این مقاله بسیار ممنونم
ممنون امیدوارم یه روزی همه دست از استفاده از company-base ها بردارن…!
سلام. مطلب خوبی بود. البته خیلی ساده بود و برای من نقش مرور رو داشت ولی مفید بود.
ممنون 🙂
سپاس فراوان عالی بود