ماژول hstore نوع داده hstore را برای ذخیره جفت های کلید-مقدار در یک مقدار پایگاه داده PostgreSQL پیاده سازی می کند. کلیدها و مقادیر فقط رشته های متنی هستند.
در عمل، میتوانید نوع داده hstore را در برخی موارد مفید بیابید، مانند دادههای نیمه ساختاریافته یا ردیفهایی با ویژگیهای بسیاری که به ندرت مورد پرسش قرار میگیرند.
قبل از کار با نوع داده hstore، باید پسوند hstore را فعال کنید که ماژول contrib را در نمونه PostgreSQL شما بارگیری می کند.
عبارت زیر پسوند hstore را ایجاد می کند:
CREATE EXTENSION hstore;
جدولی به نام books ایجاد می کنیم که سه ستون دارد:
ما از دستور CREATE TABLE برای ایجاد جدول books به صورت زیر استفاده می کنیم:
CREATE TABLE books (
id serial primary key,
title Varchar(255),
attr hstore
);
دستور 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 شبیه پرس و جو داده ها از یک ستون با نوع داده بومی با استفاده از عبارت SELECT به شرح زیر است:
SELECT attr FROM books;
Postgresql hstore عملگر -> را برای جستجوی مقدار یک کلید خاص از یک ستون hstore فراهم می کند. به عنوان مثال، اگر بخواهیم ISBN-13 تمام کتاب های موجود در جدول کتاب ها را بدانیم، می توانیم از عملگر -> به صورت زیر استفاده کنیم:
SELECT
attr -> ‘ISBN-13’ AS isbn
FROM
books;
میتوانید از عملگر -> در عبارت 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 به شما امکان می دهد جفت کلید-مقدار موجود را از یک ستون hstore حذف کنید. برای مثال، عبارت زیر جفت کلید-مقدار “freeshipping”=>”no” را در ستون attr حذف می کند.
UPDATE books
SET attr = delete(attr, ‘freeshipping’);
شما می توانید یک کلید خاص را در ستون 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، از تابع ()akeys به صورت زیر استفاده می کنید:
SELECT
akeys (attr)
FROM
books;
یا اگر میخواهید PostgreSQL نتیجه را به صورت مجموعه برگرداند، میتوانید از تابع skey() استفاده کنید.
SELECT
skeys (attr)
FROM
books;
مانند کلیدها، می توانید تمام مقادیر را از یک ستون hstore با استفاده از تابع avals() به شکل آرایه دریافت کنید.
SELECT
avals (attr)
FROM
books;
یا اگر می خواهید نتیجه را به صورت مجموعه ای دریافت کنید، می توانید از تابع svals() استفاده کنید.
SELECT
svals (attr)
FROM
books;
PostgreSQL تابع hstore_to_json() را برای تبدیل داده های hstore به JSON فراهم می کند. بیانیه زیر را ببینید:
SELECT
title,
hstore_to_json (attr) json
FROM
books;
برای تبدیل دادههای hstore به مجموعهها، از تابع every() به صورت زیر استفاده میکنید:
SELECT
title,
(EACH(attr) ) . *
FROM
books;
در این آموزش نحوه کار با نوع داده hstore PostgreSQL را به شما نشان دادیم و مفیدترین عملیاتی را که می توانید در برابر نوع داده hstore انجام دهید، معرفی کردیم.