معرفی

سیستم مدیریت پایگاه داده رابطه ای جزء اصلی وب سایت ها و برنامه های کاربردی هستند. این سیستم ها یک روش ساختاری را برای ذخیره سازی ، سازمان بندی و دسترسی به اطلاعات را فراهم می کنند. در این آموزش به روش نصب و استفاده از سیستم مدیریت پایگاه داده PostgreSQL در توزیع لینوکس Ubuntu 16.04 می پردازیم و در ادامه ، استفاده عمومی و دستور های  پایه از این پایگاه داده را بیان می کنیم.

PostgreSQL یا Postgre یک سیستم مدیریت پایگاه داده رابطه ای است که یک پیاده سازی از زبان پرس و جو SQL Query می باشد. PostgreSQL  یک پایگاه داده بسیار محبوب برای پروژه های کوچک و بزرگ است و مزیت آن سازگاری با استاندارد ها است و دارای ویژگی های پیشرفته مانند ارتباطات پایدار با دیتابیس و همزمانی بدون خواندن قفل ها است.

نصب PostgreSQL

خوشبختانه مخازن پیش فرض Ubuntu شامل بسته های Postgres هستند و با ابزار مدیریت بسته های apt به راحتی می توانیم آن را نصب کنیم. از آنجایی که در این آموزش اولین بار است که از apt استفاده می کنیم ، نیاز است که اطلاعات بسته های آن را به روز کنیم ، سپس می توانیم بسته Postgre و بسته های contrib- را که برای اضافه کردن برخی ابزارها و عملکرد ها است را نصب کنیم :

# sudo apt-get update
# sudo apt-get install postgresql postgresql-contrib

پس از نصب برنامه می توانیم به نحوه استفاده از آن بپردازیم و همچنین بررسی کنیم که چه تفاوت هایی که با سیستم های مدیریت پایگاه داده های مشابه دیگر دارد و چطور از آن ها استفاده کنیم.

استفاده از نقش ها و دیتابیس ها – Using PostgreSQL Roles and Databases

به صورت پیش فرض PostgreSQL از مفهومی به نام نقش ها “Roles” برای مدیریت احراز هویت و مجوزهای دسترسی استفاده می کند. که به نوعی شبیه به حسابهای معمولی یونیکس هستند ، ولی بین کاربران و گروه ها تمایز قائل نیست و PostgreSQL به جای آن ، واژه ی انعطاف پذیر تر “Roles” را ترجیح می دهد.

نقش ها یا همان Role ها شامل مجوز های دسترسی هستند که به یک یا چند کاربر یا گروه متصل می شوند و سطح دسترسی کاربر پس از ورود طبق مجوز های تعریف شده در این نقش ها تعریف می شود.

همراه با نصب Postgres احراز هویت ident نیز راه اندازی می شود ،که نقش های Postgres را به کاربران سیستم ماشین لینوکس/یونیکس متصل می کند. اگر یک نقش در Postgres وجود داشته باشد ، کاربر ماشین لینوکس با همان نام کاربری می تواند با آن نقش وارد شود.

چند روش برای ورود برای استفاده از کاربران تعریف شده لینوکس برای استفاده از Postgres وجود دارد.

ورود به حساب کاربری postgres

در فرآیند نصب یک کاربر با نام postgres ساخته می شود که به نقش پیش فرض Postgres متصل است. با دستور زیر می توانید به این کاربر منتقل یا جا به جا شوید :

$ sudo -i -u postgres

با دستور زیر می توانید به خط فرمان Postgres دسترسی داشته باشید :

$ psql

با این روش می توانید به سیستم وارد شوید و با مدیریت پایگاه داده ارتباط برقرار کنید.

برای خروج از خط فرمان PostgreSQL نیز از دستور زیر استفاده کنید :

postgres=# \q

بعد از اجرای این دستور باید به محیط خط فرمان لینوکس برگردانده شوید.

دسترسی به خط فرمان Postgres بدون انتقال کاربر

همچنین می توانید دستور مورد نظرتان را مستقیما با کاربر postgres و با sudo اجرا کنید. در مثال قبل که می خواستیم خط فرمان postgres برسیم ، در یک مرحله با وارد کردن دستور psql با کاربر postgres و با sudo ، می توانیم این کار را انجام دهیم :

$ sudo -u postgres psql

به این شکل مستقیما و بدون واسطع پوسته shell ، وارد خط فرمان postgres می شوید.

همچنین با دستور زیر می توانید از نشست postgres فعالی که در آن هستید خارج شوید :

postgres=# \q

ایجاد یک نقش جدید

در حال حاضر فقط یک نقش postgres در پایگاه داده وجود دارد. با دستور createrole می توانیم نقش یا Role جدید ایجاد کنیم. گزینه interactive– مقادیر مورد نیاز را از شما می گیرد.

اگر با کاربر postgres وارد شدید برای ساخت نقش جدید ، دستور زیر را وارد کنید :

postgres@server:~$ createrole –interactive

اگر به جای تغییر کاربر ترجیح می دهید که از sudo استفاده کنید ، دستور زیر را وارد کنید :

$ sudo -u postgres createrole –interactive

در ادامه اجرای اسکریپت ، از شما سئوالاتی را می پرسد که با پاسخ مناسب مشخصات نقش جدید را تنظیم می کنید :

Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y

همچنین با مطالعه راهنما man این دستور ، می توانید اطلاعات بیشتری در مورد گزینه های دیگر این دستور بدست آورید :

$ man createrole

ساخت یک دیتابیس جدید

به صورت پیش فرض ، سیستم احراز هویت Postgres در نظر می گیرد که یک دیتابیس هم نام با نام نقش یا Role ایجاد شده وجود دارد که آن نقش به دیتابیس متصل است و برای ورد از آن استفاده می کند.

پس در قسمت قبل که یک کاربر با نام sammy ایجاد کردیم ، باید یک دیتابیس با نام sammy ایجاد کنیم که نقش یا Role کاربر sammy به آن دسترسی داشته باشد. برای ایجاد دیتابیس جدید از دستور createdb استفاده می کنیم :

اگر با کاربر postgres وارد شده اید دستور زیر را وارد کنید :

postgres@server:~$ createdb sammy

و اگر مانند قبل می خواهید که بدون تغییر کاربر و با sudo دستور را وارد کنید به شکل زیر این کار را انجام دهید :

$ sudo -u postgres createdb sammy

باز کردن خط فرمان با نقش جدید

برای وارد شدن به سیستم احراز هویت ident باید یک کاربر لینوکسی هم نام با نقش و دیتابیس ایجاد شده داشته باشید. اگر کاربری با این نام ندارید با دستور adduser می توانید یک کاربر جدید در لینوکس بسازید. برای اجرای این دستور باید دسترسی کاربر با مجوز sudo را داشته باشید ( کاربری به غیر از postgres ):

$ sudo adduser sammy

وقتی که کاربر مورد نظر را ایجاد کردید با این می توانید با دستور زیر با کاربر جدید وارد شوید :

$ sudo -i -u sammy
$ psql

همچنین این دستور را می توانید وارد کنید :

$ sudo -u sammy psql

با فرض اینکه همه چیز درست تنظیم شده است ، شما وارد سیستم می شوید. اگر می خواهید به دیتابیس دیگری متصل شوید به صورت زیر آن را مشخص کنید :

$ psql -d postgres

پس از اتصال ، با دستور زیر می توانید اطلاعات اتصال خود را بررسی کنید :

sammy=# \conninfo
You are connected to database “sammy” as user “sammy” via socket in “/var/run/postgresql” at port “5432”.

اگر با کاربر یا دیتابیس پیش فرض وارد نشده این ، این اطلاعات می تواند مفید باشد.

ایجاد و حذف جداول

اکنون با یاد گرفتن وارد شدن به PostgreSQL و اتصال به دیتابیس ، می توانیم وظایف اصلی دیگری را انجام دهیم. در ابتدا یک جدول برای ذخیره برخی داده ها ایجاد می کنیم.

دقت کنید که در ابتدا باید به PostgreSQL وارد شوید و همانطور که قبلا گفتیم ، دیتابیس مورد نظر را انتخاب کنید سپس اقدام به ایجاد جدول در آن دیتابیس کنید.

برای شروع یک جدول ایجاد می کنیم که اطلاعات یک زمین بازی را ذخیره می کند. شکل عمومی دستور برای این کار شبیه زیر است :

CREATE TABLE table_name (
column_name1 col_type (field_length)
column_constraints, column_name2 col_type (field_length),
column_name3 col_type (field_length)
);

همانطور که می بینید یک نام برای جدول انتخاب کردیم و ستون هایی که می خواستیم را تعریف کردیم ، همچنین نوع ستون و بیشترین طول هر رشته داده را تعیین کردیم. همچنین برای هر ستونی که بخواهیم به صورت دلخواه می توانیم محدودیت هایی را قرار دهیم.

برای مثال ما ، دستورات گفته شده را به صورت زیر وارد می کنیم :

CREATE TABLE playground (
equip_id serial PRIMARY KEY,
type varchar (50) NOT NULL,
color varchar (25) NOT NULL,
location varchar(25) check (location in (‘north’, ‘south’, ‘west’, ‘east’, ‘northeast’, ‘southeast’, ‘southwest’, ‘northwest’)),
install_date date
);

اکنون یک زمین بازی را با مشخصات مد نظرمان ایجاد کردی که این مشخصات با یک ID از نوع serial شروع می شود. نوع داده serial ، به صورت افزایش خودکار ، یک عدد integer را اختصاص می دهد. همچنین این ستون را به صورت primery key تعریف کردیم ، و این یعنی اینکه این ستون حتما باید مقدار داشته باشد و حتما باید منحصر به فرد بوده و تکراری نباشد.

مقدار بیشترین طول را برای دو تا از ستون ها ( equip_id و install_date ) تعیین نکردیم ، به این دلیل که محدودیت اندازه طول به صورت ضمنی در نوع داده ای این ستون ها تعریف شده است.

برای ستون های type و color نیز مشخص کردیم که نباید خالی باشند و حتما باید دارای مقدار باشند. یک ستون با نام location ایجاد کردیم و مقادیر آن را محدود به هشت مقدار ممکن که برای آن تعریف شده ، محدود شده است ، به این صورت که فقط یکی از این هشت مقدار باید باشد. آخرین ستون نیز برای تاریخ است که هنگام ایجاد مشخصات زمان سیستم را گرفته و ذخیره می کند.

جدول جدید ایجاد شده را به صورت زیر می توانیم مشاهده کنیم :

sammy=# \d

Output
List of relations
Schema | Name | Type | Owner
——–+————————-+———-+——-
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(۲ rows)

زمین بازی که ایجاد کردیم را می توانید مشاهده کنید ، ولی چیز دیگری با نام playground_equip_id_seq و نوع داده sequence را مشاهده می کنید ، که این جدول نماینده نوع داده serial است که برای ستون equip_id تعیین کردیم. این جدول به صورت خودکار برای ستون هایی از نوع serial ایجاد می شود  و یک دنباله عددی را ایجاد می کند و شماره بعدی این سری را نگهداری می کند.

اگر می خواهید که جدول را بدون دنباله مشاهده کنید ، دستور زیر را وارد کنید :

sammy=# \dt
List of relations
Schema | Name | Type | Owner
——–+————+——-+——-
public | playground | table | sammy
(۱ row)

اضافه کردن ،گزارش گرفتن و حذف داده در جدول

اکنون یک جدول داریم که می توانیم داده هایی را به آن اضافه کنیم. در ادامه می خواهیم که یک تاب و یک سرسره به این جدول اضافه کنیم. برای این کار باید نام جدولی را که می خواهیم به آن داده اضافه کنیم را فراخوانی می کنیم ، سپس نام ستون ها را انتخاب می کنیم و داده هایی که به هر ستون باید اضافه شود را قرار می دهیم. تاب و سرسره ای که می خواهیم اضافه کنیم به صورت زیر است :

sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘slide’, ‘blue’, ‘south’, ‘2014-04-28’);
sammy=# INSERT INTO playground (type, color, location, install_date) VALUES (‘swing’, ‘yellow’, ‘northwest’, ‘2010-08-16’);

دقت کنید که هنگام وارد کردن داده ها از اشتباهات رایج جلوگیری کنید. مثلا نام ستون ها نباید در کوتیشن قرار گیرند ولی داده ها باید در کوتیشن قرار داشته باشند.

نکته مهم دیگر این که به ستون equip_id نباید مقدار بدهید. زیرا هر ردیف جدید که در جدول ایجاد می شود این ستون به صورت خودکار مقدار دهی می شود.

با وارد کردن دستور زیر می توانید اطلاعاتی که وارد کرده اید را مشاهده کنید :

sammy=# SELECT * FROM playground;
equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
۱ | slide | blue | south | 2014-04-28
۲ | swing | yellow | northwest | 2010-08-16
(۲ rows)

در اینجا مشاهده می کنید که ستون equip_id به درستی مقدار دهی شده و بقیه داده ها نیز به درستی در ستون های خود قرار دارند.

اگر در زمین بازی ، سرسره خراب شود و بخواهیم آن را حذف کنیم ، با دستور زیر اطلاعات آن را از جدول حذف می کنیم :

sammy=# DELETE FROM playground WHERE type = ‘slide’;

اگر مجددا از جدول گزارش بگیریم ، مشاهده می کنید که دیگر سرسره وجود نخواهد داشت :

sammy=# SELECT * FROM playground;
equip_id | type | color | location | install_date
———-+——-+——–+———–+————–
۲ | swing | yellow | northwest | 2010-08-16
(۱ row) 

چطور ستون های یک جدول اضافه و حذف کنیم

بعد از ساختن یک جدول به راحتی می توانیم ستونی را به آن اضافه کنیم. برای مثال یک ستون که نشان دهنده آخرین بازدید تعمیرات و نگهداری هر وسیله است را با دستور زیر اضافه می کنیم :

sammy=# ALTER TABLE playground ADD last_maint date;

اگر مجددا از جدول گزارش بگیرید ، مشاهده می کنید که ستون جدید اضافه شده است ( اما داده ای در آن وجود ندارد ) :

sammy=# SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint
———-+——-+——–+———–+————–+————
۲ | swing | yellow | northwest | 2010-08-16 |
(۱ row)

برای حذف یک ستون نیز به راحتی می توانیم این کار را انجام دهیم. فرض کنید که کارمندان زمین بازی از ابزار دیگری برای نگهداری تاریخچه زمان های بازدید تعمیرات و نگهداری استفاده می کنند و دیگر نیازی به این ستون نیست. با دستور زیر این ستون را حذف می کنیم :

sammy=# ALTER TABLE playground DROP last_maint;

چطور داده های یک جدول را به روز رسانی کنیم

الان می دانیم که چطور ردیف ها را به یک جدول اضافه و حذف کنیم ولی درباره تغییر و یا اصلاح ورودی های موجود صحبت نکردیم. بوسیله یک پرس و جو یا Query بر روی تنظیمات یک ردیف ای که می خواهید از مقدار آن استفاده کنید ، می توانید مقدار ورودی موجود را به روز رسانی کرده و آن را تغییر دهید.

برای مثال یک کوئری Query بر روی ردیف swing انجام می دهیم ( این تغییر برای تمام ردیف هایی که مقدار swing در جدول دارد اعمال می شود ) و رنگ آن را به red تغییر می دهیم. برای این کار به صورت زیر عمل می کنیم :

sammy=# UPDATE playground SET color = ‘red’ WHERE type = ‘swing’;

با گزارش گیری از جدول ، صحت عملکرد دستور را مشاهده می کنیم :

sammy=# SELECT * FROM playground;
equip_id | type | color | location | install_date
———-+——-+——-+———–+————–
۲ | swing | red | northwest | 2010-08-16
(۱ row)

همانطور که مشاهده می کنید رنگ تاب به قرمز تغییر کرده است.

پایان

در این مطلب به نصب و راه اندازی پایگاه داده PostgreSQL بر روی Ubuntu 16.04 پرداختیم و دستورات و نحوه کار کردن با آن را به صورت عمومی و پایه ای بیان کردیم. مطالب بسیار زیاد دیگری برای یادگیری PostgreSQL وجود دارد که سعی می کنیم در مطالب بعدی آن ها را عنوان کنیم.

منبع : پارس پک

درباره آذرارتباط