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

کار با آرایه‌ها در PostgreSQL


در این مقاله، با نحوه کار با آرایه‌ها در PostgreSQL و استفاده از توابع کاربردی برای دستکاری آرایه‌ها آشنا خواهید شد.

معرفی نوع داده آرایه در PostgreSQL

در PostgreSQL، آرایه مجموعه‌ای از عناصری است که همگی دارای یک نوع داده مشابه هستند. آرایه‌ها می‌توانند یک‌بعدی، چندبعدی و حتی تودرتو باشند.

هر نوع داده در PostgreSQL یک نوع آرایه معادل دارد. به‌عنوان مثال، نوع داده integer دارای آرایه‌ای با نوع integer[] و نوع character دارای آرایه‌ای با نوع character[] است.

همچنین، اگر یک نوع داده کاربر تعریف کنید، PostgreSQL به طور خودکار نوع آرایه‌ی مرتبط با آن را ایجاد می‌کند.

برای تعریف یک ستون با نوع آرایه، از سینتکس زیر استفاده می‌کنید:

column_name datatype []

در این سینتکس، یک آرایه یک‌بعدی از نوع datatype تعریف می‌شود.

مثال: ایجاد جدول با ستون آرایه

در مثال زیر، جدولی به نام contacts ایجاد می‌کنیم که ستون phones به صورت آرایه‌ای از نوع TEXT تعریف شده است:

CREATE TABLE contacts (

id SERIAL PRIMARY KEY,

name VARCHAR (100),

phones TEXT []

);

در اینجا، ستون phones یک آرایه یک‌بعدی است که شماره تلفن‌های مختلف یک مخاطب را نگه می‌دارد.

تعریف آرایه چندبعدی

برای تعریف آرایه‌های چندبعدی، می‌توانید از کروشه‌های اضافی استفاده کنید:

column_name data_type [][]

درج داده در آرایه

برای درج داده در ستون آرایه، از سینتکس زیر استفاده می‌شود:

INSERT INTO contacts (name, phones)

VALUES(‘John Doe’,ARRAY [ ‘(408)-589-5846′,'(408)-589-5555’ ]);

در این مثال، از سازنده ARRAY برای ساختن آرایه و درج آن در جدول contacts استفاده شده است.

همچنین می‌توانید از آکولادها برای درج داده استفاده کنید:

INSERT INTO contacts (name, phones)

VALUES(‘Lily Bush’,'{“(408)-589-5841”}’),

(‘William Gate’,'{“(408)-589-5842″,”(408)-589-58423”}’);

در اینجا دو ردیف به جدول contacts اضافه می‌شود.

پرس و جو از داده‌های آرایه

برای بازیابی داده‌ها از جدول contacts، از دستور زیر استفاده می‌کنیم:

SELECT

name,

phones

FROM

contacts;

نتیجه:

name     |              phones

————–+———————————-

John Doe     | {(۴۰۸)-۵۸۹-۵۸۴۶,(۴۰۸)-۵۸۹-۵۵۵۵}

Lily Bush    | {(۴۰۸)-۵۸۹-۵۸۴۱}

William Gate | {(408)-589-5842,(408)-589-58423}

برای دسترسی به یک عنصر آرایه، می‌توانید از زیرنویس استفاده کنید:

SELECT

name,

phones [1]

FROM

contacts;

نتیجه:

name     |     phones

————–+—————-

John Doe     | (۴۰۸)-۵۸۹-۵۸۴۶

Lily Bush    | (۴۰۸)-۵۸۹-۵۸۴۱

William Gate | (408)-589-5842

همچنین می‌توانید از عناصر آرایه در بخش WHERE برای فیلتر کردن ردیف‌ها استفاده کنید. به عنوان مثال، این کوئری مخاطبانی را پیدا می‌کند که شماره تلفن (۴۰۸)-۵۸۹-۵۸۴۲۳ را به‌عنوان دومین شماره تلفن خود دارند:

SELECT

name

FROM

contacts

WHERE

phones [2] = ‘(408)-589-58423’;

نتیجه:

markdown

Copy code

name

————–

William Gate

اصلاح آرایه در PostgreSQL

PostgreSQL به شما این امکان را می‌دهد که هر عنصر آرایه یا کل آرایه را به‌روزرسانی کنید.

برای مثال، به‌روزرسانی دومین شماره تلفن William Gate:

UPDATE contacts

SET phones [2] = ‘(408)-589-5843’

WHERE ID = 3

RETURNING *;

نتیجه:

id |     name     |             phones

—-+————–+———————————

۳ | William Gate | {(408)-589-5842,(408)-589-5843}

برای به‌روزرسانی کل آرایه:

UPDATE

contacts

SET

phones = ‘{“(408)-589-5843”}’

WHERE

id = 3

RETURNING *;

نتیجه:

bash

Copy code

id |     name     |      phones

—-+————–+——————

۳ | William Gate | {(408)-589-5843}

جستجو در آرایه PostgreSQL

فرض کنید می‌خواهید بدانید چه کسی شماره تلفن (۴۰۸)-۵۸۹-۵۵۵۵ را دارد، بدون توجه به اینکه این شماره در کدام بخش از آرایه قرار دارد. برای این کار می‌توانید از تابع ANY() استفاده کنید:

SELECT

name,

phones

FROM

contacts

WHERE

‘(۴۰۸)-۵۸۹-۵۵۵۵’ = ANY (phones);

نتیجه:

name   |             phones

———-+———————————

John Doe | {(408)-589-5846,(408)-589-5555}

تبدیل آرایه‌ها به لیست

PostgreSQL تابع unnest() را ارائه می‌دهد که آرایه‌ها را به یک لیست از ردیف‌ها گسترش می‌دهد. به عنوان مثال، کوئری زیر تمامی شماره‌های تلفن آرایه‌ی phones را به لیست تبدیل می‌کند:

SELECT

name,

unnest(phones)

FROM

contacts;

نتیجه:

name     |     unnest

————–+—————-

John Doe     | (۴۰۸)-۵۸۹-۵۸۴۶

John Doe     | (۴۰۸)-۵۸۹-۵۵۵۵

Lily Bush    | (۴۰۸)-۵۸۹-۵۸۴۱

William Gate | (408)-589-5843

خلاصه

  • در PostgreSQL، آرایه مجموعه‌ای از عناصر با نوع داده مشابه است.
  • برای تعریف آرایه یک‌بعدی در یک ستون از datatype [] استفاده کنید.
  • برای دسترسی به عناصر آرایه از سینتکس [index] استفاده کنید.
  • برای گسترش آرایه به یک لیست از ردیف‌ها از تابع unnest() استفاده کنید.
database
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید