
سیستم مدیریت پایگاه داده PostgreSQL
سیستم مدیریت پایگاه داده رابطه ای جز اصلی وب سایت ها و برنامه های کاربردی می باشد. این سیستم یک روش ساختاری برای ذخیره سازی، سازمان بندی و دسترسی به اطلاعات را فراهم می نماید. در اینجا به بررسی روش نصب و استفاده از سیستم مدیریت پایگاه داده 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
پس از نصب این برنامه می توانیم به بررسی نحوه استفاده از آن پرداخته و تفاوت های آن را با سیستم های مدیریت پایگاه داده های مشابه دیگر بررسی نماییم.
استفاده از نقش ها ودیتابیسPostgreSQL
به صورت پیش فرض PostgreSQL از مفهومی به نام Roles برای مدیریت احراز هویت و مجوزهای دسترسی استفاده می کند. که شبیه به حسابهای معمولی یونیکس می باشد، که بین کاربران و گروه ها تمایزی قائل نیست بدین منظور PostgreSQL واژه ی Roles را ترجیح می دهد. نقش ها می توانند برای یک یا چند کاربر یا گروه مجوزهای دسترسی متفاوتی تعریف نمایند. همراه با نصب Postgre احراز هویت identنیز راه اندازی می شود، که نقش های Postgre را به کاربران لینوکس / یونیکس متصل می کند. اگر یک Roles در Postgre وجود داشته باشد، کاربر لینوکس می تواند با آن Roles وارد شود. چند روش دیگر برای ورود کاربران به لینوکس جهت استفاده از Postgreوجود دارد.
ورود به حساب کاربری postgres
در فرآیند نصب یک کاربر با نام postgres ساخته می شود که به Role پیش فرض postgres متصل است. با دستور زیر می توانید به این کاربر منتقل یا جا به جا شوید :
$ sudo -i -u postgres
با دستور زیر می توانید به خط فرمان postgres دسترسی داشته باشید و از این طریق به سیستم وارد شده و با مدیریت پایگاه داده ارتباط برقرارنمایید.
$ psql
برای خروج از خط فرمان PostgreSQL می توانید از دستور زیر استفاده نمایید که بعد از اجرای این دستور باید به محیط خط فرمان لینوکس برگردانده شوید.
postgres=# \q
دسترسی به خط فرمان postgres بدون انتقال کاربر
شما می توانید مطابق دستور زیر مستقیما و بدون واسط shell به خط فرمان postgresدسترسی داشته باشید:
$ sudo -u postgres psql
همچنین با دستور زیر می توانید از نشست postgresفعالی که در آن هستید خارج شوید:
postgres=# \q
ایجاد یک نقش جدید
در حال حاضر فقط یک postgres در پایگاه داده وجود دارد. با دستور createrole می توانیمRole جدید ایجاد کنیم. که گزینه --interactive مقادیر مورد نیاز را از شما می گیرد. اگر با کاربر postgres وارد می شوید می توانید برای ساخت نقش جدید دستور زیر را وارد نمایید:
postgres@server:~$ createrole --interactive
اگر به جای تغییر کاربر ترجیح می دهید از sudo استفاده کنید دستور زیر را وارد نمایید:
$ sudo -u postgres createrole --interactive
در ادامه اجرای اسکریپت، سوالاتی از شما پرسیده می شود که با پاسخ مناسب می توانید مشخصات Role جدید را تنظیم نمایید:
Enter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
همچنین با مطالعه راهنما man می توانید اطلاعات بیشتری در مورد گزینه های دیگر این دستور بدست آورید:
$ man createrole
ساخت یک دیتابیس جدید
به صورت پیش فرض، در سیستم احراز هویت postgresیک دیتابیس هم نام با نام Role ایجاد شده، وجود دارد که آن Role به دیتابیس متصل است و برای ورود از آن استفاده می شود. در قسمت قبل یک کاربر با نام sammy ایجاد کردیم، و در اینجا باید یک دیتابیس با نام Sammy نیز ایجاد کنیم که Role کاربر sammy به آن دسترسی داشته باشد. برای ایجاد دیتابیس جدید از دستور created استفاده می کنیم اگر با کاربر 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 (2 rows)
زمین بازی را می توانید مشاهده نمایید، ولی جدول دیگری با نام playground_equip_id_seq و نوع داده sequence را نیز می توانید مشاهده نمایید، که این جدول نماینده نوع داده serial است که برای ستون equip_id تعیین کرده ایم. این جدول به صورت خودکار برای ستون هایی از نوع serial ایجاد می شود که یک دنباله عددی را ایجاد و شماره بعدی این سری را نگهداری می کند. اگر می خواهید که جدول را بدون دنباله مشاهده کنید، دستور زیر را وارد نمایید:
sammy=# \dt List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 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 ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2014-04-28 2 | swing | yellow | northwest | 2010-08-16 (2 rows)
در اینجا مشاهده می کنید که ستون equip_id به درستی مقدار دهی شده و بقیه داده ها نیز به درستی در ستون های خود قرار دارند.
اگر در زمین بازی، سرسره خراب شود و بخواهیم آن را حذف کنیم، با دستور زیر اطلاعات آن را از جدول حذف می کنیم:
sammy=# DELETE FROM playground WHERE type = 'slide';
اگر مجددا از جدول گزارش بگیریم، مشاهده می کنید که دیگر سرسره وجود نخواهد داشت:
sammy=# SELECT * FROM playground; equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2010-08-16 (1 row)
چطور ستون های یک جدول را اضافه و حذف کنیم
بعد از ساختن یک جدول به راحتی می توانیم ستونی را به آن اضافه کنیم. برای مثال یک ستون که نشان دهنده آخرین بازدید تعمیرات و نگهداری هر وسیله است را با دستور زیر اضافه می نماییم:
;sammy=# ALTER TABLE playground ADD last_maint date
اگر مجددا از جدول گزارش بگیرید، مشاهده می کنید که ستون جدید اضافه شده است ( اما داده ای در آن وجود ندارد )
sammy=# SELECT * FROM playground; Output equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2010-08-16 | (1 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 ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)
همانطور که مشاهده می کنید رنگ تاب به قرمز تغییر کرده است.
نتیجه گیری:
در این مطلب به نصب و راه اندازی پایگاه داده PostgreSQL بر روی Ubuntu 16.04 پرداختیم و دستورات و نحوه کار کردن با آن را بیان کردیم. مطالب بسیار زیاد دیگری برای یادگیری PostgreSQL وجود دارد که سعی می کنیم در مطالب بعدی آن ها را عنوان کنیم.