مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۵ دقیقه·۶ ماه پیش

بررسی قابلیت های ماژول hstore در پایگاه داده Postgresql


ماژول hstore نوع داده hstore را برای ذخیره جفت های کلید-مقدار در یک مقدار پایگاه داده PostgreSQL پیاده سازی می کند. کلیدها و مقادیر فقط رشته های متنی هستند.

در عمل، می‌توانید نوع داده hstore را در برخی موارد مفید بیابید، مانند داده‌های نیمه ساختاریافته یا ردیف‌هایی با ویژگی‌های بسیاری که به ندرت مورد پرسش قرار می‌گیرند.

پسوند PostgreSQL hstore را فعال کنید

قبل از کار با نوع داده hstore، باید پسوند hstore را فعال کنید که ماژول contrib را در نمونه PostgreSQL شما بارگیری می کند.

عبارت زیر پسوند hstore را ایجاد می کند:

CREATE EXTENSION hstore;

یک جدول با نوع داده hstore ایجاد کنید

جدولی به نام books ایجاد می کنیم که سه ستون دارد:

  • id کلید اصلی است که کتاب را شناسایی می کند.
  • title عنوان محصولات است
  • attr ویژگی های کتاب مانند ISBN، وزن و جلد شومیز را ذخیره می کند. نوع داده ستون attr hstore است.

ما از دستور CREATE TABLE برای ایجاد جدول books به صورت زیر استفاده می کنیم:

CREATE TABLE books (

id serial primary key,

title Varchar(255),

attr hstore

);

داده ها را در ستون hstore PostgreSQL وارد کنید

دستور INSERT زیر داده ها را در ستون hstore وارد می کند:

INSERT INTO books (title, attr)

VALUES

(

‘PostgreSQL Tutorial’, ‘”paperback” => “243”,

“publisher” => “postgresqltutorial.com”,

“language”  => “English”,

“ISBN-13”   => “978-1449370000”,

“weight”    => “11.2 ounces”‘

);

داده هایی که در ستون hstore وارد می کنیم، لیستی از جفت های کلید => ارزش جدا شده با کاما است. هم کلیدها و هم مقادیر با استفاده از دو گیومه (” “) نقل قول می شوند.

بیایید یک ردیف دیگر درج کنیم.

INSERT INTO books (title, attr)

VALUES

(

‘PostgreSQL Cheat Sheet’, ‘

“paperback” => “5”,

“publisher” => “postgresqltutorial.com”,

“language”  => “English”,

“ISBN-13”   => “978-1449370001”,

“weight”    => “1 ounces”‘

);

داده ها را از یک ستون hstore جستجو کنید

پرس و جو داده ها از یک ستون hstore شبیه پرس و جو داده ها از یک ستون با نوع داده بومی با استفاده از عبارت SELECT به شرح زیر است:

SELECT attr FROM books;


مقدار پرس و جو برای یک کلید خاص

Postgresql hstore عملگر -> را برای جستجوی مقدار یک کلید خاص از یک ستون hstore فراهم می کند. به عنوان مثال، اگر بخواهیم ISBN-13 تمام کتاب های موجود در جدول کتاب ها را بدانیم، می توانیم از عملگر -> به صورت زیر استفاده کنیم:

SELECT

attr -> ‘ISBN-13’ AS isbn

FROM

books;


از مقدار در عبارت WHERE استفاده کنید

می‌توانید از عملگر -> در عبارت WHERE برای فیلتر کردن ردیف‌هایی استفاده کنید که مقادیر ستون hstore با مقدار ورودی مطابقت دارد. برای مثال، عبارت زیر عنوان و وزن کتابی را بازیابی می‌کند که دارای ارزش ISBN-13 مطابق با ۹۷۸-۱۴۴۹۳۷۰۰۰۰ است:

SELECT

title, attr -> ‘weight’ AS weight

FROM

books

WHERE

attr -> ‘ISBN-13’ = ‘978-1449370000’;


جفت های کلید-مقدار را به ردیف های موجود اضافه کنید

با یک ستون hstore، می توانید به راحتی یک جفت کلید-مقدار جدید به ردیف های موجود اضافه کنید، به عنوان مثال، می توانید یک کلید حمل و نقل رایگان به ستون attr جدول کتاب ها به صورت زیر اضافه کنید:

UPDATE books

SET attr = attr || ‘”freeshipping”=>”yes”‘ :: hstore;

ارتباط با ما

جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده Postgresql با ما در ارتباط باشد

اکنون، می توانید بررسی کنید که آیا جفت “freeshipping” => “yes” با موفقیت اضافه شده است یا خیر.

SELECT

title,

attr -> ‘freeshipping’ AS freeshipping

FROM

books;


جفت کلید-مقدار موجود را به‌روزرسانی کنید

می توانید جفت کلید-مقدار موجود را با استفاده از عبارت UPDATE به روز کنید. عبارت زیر، مقدار کلید «ارسال رایگان» را به «نه» به‌روزرسانی می‌کند.

UPDATE books

SET attr = attr || ‘”freeshipping”=>”no”‘ :: hstore;

مستند مدیریت افزونه ها در Postgresql
جفت کلید-مقدار موجود را حذف کنید

PostgreSQL به شما امکان می دهد جفت کلید-مقدار موجود را از یک ستون hstore حذف کنید. برای مثال، عبارت زیر جفت کلید-مقدار “freeshipping”=>”no” را در ستون attr حذف می کند.

UPDATE books

SET attr = delete(attr, ‘freeshipping’);

یک کلید خاص را در ستون hstore بررسی کنید

شما می توانید یک کلید خاص را در ستون hstore با استفاده از عملگر در عبارت WHERE. به عنوان مثال، عبارت زیر همه سطرهای دارای attr حاوی انتشار دهنده کلید را برمی گرداند.

SELECT

title,

attr->’publisher’ as publisher,

attr

FROM

books

WHERE

attr ? ‘publisher’;


جفت کلید-مقدار را بررسی کنید

می توانید بر اساس جفت کلید-مقدار hstore با استفاده از عملگر @> پرس و جو کنید. عبارت زیر تمام ردیف هایی را که ستون attr آنها حاوی یک جفت کلید-مقدار است بازیابی می کند که با “weight”=>”11.2 ounces” مطابقت دارد.

SELECT

title

FROM

books

WHERE

attr @> ‘”weight”=>”11.2 ounces”‘ :: hstore;

سطرهای پرس و جو که حاوی چندین کلید مشخص شده هستند

با استفاده از عملگر ?& می توانید سطرهایی را که ستون hstore آنها حاوی چندین کلید است پرس و جو کنید. برای مثال، می‌توانید کتاب‌هایی را دریافت کنید که ستون attr حاوی کلیدهای زبان و وزن باشد.

SELECT

title

FROM

books

WHERE

attr ?& ARRAY [ ‘language’, ‘weight’ ];


برای بررسی اینکه آیا ردیفی که ستون hstore آن حاوی کلیدی از لیست کلیدها است، از ?| عملگر به جای عملگر ?&.

همه کلیدها را از یک ستون hstore دریافت کنید

برای دریافت تمام کلیدها از یک ستون hstore، از تابع ()akeys به صورت زیر استفاده می کنید:

SELECT

akeys (attr)

FROM

books;


یا اگر می‌خواهید PostgreSQL نتیجه را به صورت مجموعه برگرداند، می‌توانید از تابع skey() استفاده کنید.

SELECT

skeys (attr)

FROM

books;


تمام مقادیر را از یک ستون hstore دریافت کنید

مانند کلیدها، می توانید تمام مقادیر را از یک ستون hstore با استفاده از تابع avals() به شکل آرایه دریافت کنید.

SELECT

avals (attr)

FROM

books;


یا اگر می خواهید نتیجه را به صورت مجموعه ای دریافت کنید، می توانید از تابع svals() استفاده کنید.

SELECT

svals (attr)

FROM

books;


داده های hstore را به JSON تبدیل کنید

PostgreSQL تابع hstore_to_json() را برای تبدیل داده های hstore به JSON فراهم می کند. بیانیه زیر را ببینید:

SELECT

title,

hstore_to_json (attr) json

FROM

books;


داده های hstore را به مجموعه تبدیل کنید

برای تبدیل داده‌های hstore به مجموعه‌ها، از تابع every() به صورت زیر استفاده می‌کنید:

SELECT

title,

(EACH(attr) ) . *

FROM

books;


در این آموزش نحوه کار با نوع داده hstore PostgreSQL را به شما نشان دادیم و مفیدترین عملیاتی را که می توانید در برابر نوع داده hstore انجام دهید، معرفی کردیم.

منبع مستند

پایگاه postgresqlhstorepostgresqlخدمات postgresqlمشاوره postgresql
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید