PostgreSQL Niz: funkcije, vrsta, primjer

Što je PostgreSQL Niz?

In PostgreSQL, možemo definirati stupac kao niz valjanih tipova podataka. Tip podataka može biti ugrađen, korisnički definiran ili nabrojani tip. Osim toga, nizovi igraju važnu ulogu u PostgreSQL.

Svaki odgovarajući PostgreSQL vrsta podataka dolazi s relevantnom vrstom polja. Na primjer, tip podataka integer ima tip niza integer[], tip podataka znakova ima tip niza character[], itd.

Stvaranje PostgreSQL nizovi

U sljedećem primjeru stvorit ćemo tablicu pod nazivom Zaposlenici sa stupcem kontakta definiranim kao tekstualno polje:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Naredba bi se trebala uspješno pokrenuti.

Stvaranje PostgreSQL nizovi

Umetanje PostgreSQL Vrijednosti polja

Pustite nas sada INSERT vrijednosti u gornju tablicu:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Umetanje bi se trebalo uspješno pokrenuti.

Umetanje PostgreSQL Vrijednosti polja

Vrijednosti trećeg stupca, odnosno kontakta, umetnute su kao niz. To je postignuto korištenjem konstruktora ARRAY.

U ovom primjeru smo ih zatvorili u uglate zagrade []. Imamo dva kontakta za zaposlenicu Alice John.

Još uvijek možemo koristiti vitičaste zagrade {} kao što je prikazano u nastavku:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Naredba bi se trebala uspješno izvesti.

Umetanje PostgreSQL Vrijednosti polja

Gornje izjave umetnut će dva retka u tablicu zaposlenika. Kada koristite vitičaste zagrade, niz je stavljen unutar jednostrukih navodnika ('), dok su stavke tekstualnog niza ovijene unutar dvostrukih navodnika (“).

Upit za podatke polja

Za upite elemenata niza koristimo naredbu SELECT.

Da bismo vidjeli sadržaj naše tablice Zaposlenici, pokrećemo sljedeću naredbu:

SELECT * FROM Employees;

Ovo vraća sljedeće:

Upit za podatke polja

Elementi stupca niza, odnosno kontakt, stavljeni su u vitičaste zagrade {}.

Za pristup samim elementima niza, dodajemo indeks unutar uglatih zagrada []. Prvi element u nizu nalazi se na poziciji 1.

Na primjer, moramo dobiti imena zaposlenika i samo njihov prvi kontakt za one zaposlenike s više od jednog kontakta. Ovome možemo pristupiti kao kontakt[1].

Da vidimo ovo:

SELECT name, contact[1]
FROM Employees;

Ovo će vratiti sljedeće:

Upit za podatke polja

Možemo koristiti naredbu SELECT zajedno s klauzulom WHERE za filtriranje redaka na temelju stupca polja.

Na primjer, da bismo vidjeli zaposlenika s (408)-567-78234 kao drugi kontakt, možemo pokrenuti sljedeću naredbu:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

Ovo će vratiti sljedeće:

Upit za podatke polja

Modificiranje PostgreSQL Poredak

Možete ažurirati sve ili jedan element niza.

Evo sadržaja tablice zaposlenika:

Modificiranje PostgreSQL Poredak

Ažurirajmo drugi telefonski broj zaposlenika Jamesa Busha, čiji je ID 3:

Modificiranje PostgreSQL Poredak

Pokrenite sljedeću naredbu:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Naredba bi se trebala uspješno izvesti:

Modificiranje PostgreSQL Poredak

Upitajmo tablicu da provjerimo je li promjena bila uspješna:

Modificiranje PostgreSQL Poredak

Promjena je bila uspješna.

Pretraživanje u a PostgreSQL Poredak

Trenutačno je tablica naših zaposlenika sljedeća:

Pretraživanje u a PostgreSQL Poredak

Pretpostavimo da trebamo znati tko je vlasnik kontakta (408)-783-5731 bez obzira na položaj u nizu kontakata, možemo koristiti funkciju ANY() kao što je prikazano u nastavku:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Ovo će vratiti sljedeće:

Pretraživanje u a PostgreSQL Poredak

Proširujući nizovi

Vrijednosti niza možemo podijeliti u retke. Ovaj proces je poznat kao proširenje polja.

U primjeru tablice Zaposlenici, postoje neki zaposlenici s dva kontakta u nizu kontakata. Možemo ih podijeliti u zasebne retke.

PostgreSQL pruža funkciju unnest() koja se može koristiti za ovo.

Na primjer:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Ovo će vratiti sljedeće:

Proširujući nizovi

Zaposlenici Alice John i James Bush, imaju dva kontakta. Možemo se podijeliti u zasebne redove.

Koristeći pgAdmin

Stvaranje PostgreSQL nizovi

Da biste postigli isto putem pgAdmina, učinite ovo:

Korak 1) Prijavite se na svoj pgAdmin račun.

Korak 2)

  1. Na navigacijskoj traci s lijeve strane kliknite baze.
  2. Kliknite gumb Demo

Stvaranje PostgreSQL Nizovi pomoću pgAdmin-a

Korak 3) Upišite upit u uređivač upita za izradu tablice Zaposlenici:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Korak 4) Pritisnite gumb Izvrši.

Stvaranje PostgreSQL Nizovi pomoću pgAdmin-a

Umetanje PostgreSQL Vrijednosti polja

Korak 1) Unesite sljedeći upit u uređivač upita:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Korak 2) Pritisnite gumb Izvrši:

Umetanje PostgreSQL Vrijednosti polja

Korak 3)

Za korištenje vitičastih zagrada u upitu

Korak 1) Unesite sljedeći upit u uređivač upita:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Korak 2) Kliknite gumb Izvrši:

Umetanje PostgreSQL Vrijednosti polja

Upit za podatke polja

Korak 1) Da biste vidjeli sadržaj tablice Zaposlenici, upišite sljedeći upit u uređivač upita:

SELECT * FROM Employees;

Korak 2) Pritisnite gumb Izvrši:

Upit za podatke polja pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Upit za podatke polja pomoću pgAdmin-a

Korak 3) Da vidite prve kontakte zaposlenika:

  1. Unesite sljedeći upit u uređivač upita:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Pritisnite gumb Izvrši.

Upit za podatke polja pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Upit za podatke polja pomoću pgAdmin-a

Korak 4) Za kombiniranje naredbe SELECT s klauzulom WHERE:

  1. Unesite sljedeću naredbu u uređivač upita:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Pritisnite gumb Izvrši.

Upit za podatke polja pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Upit za podatke polja pomoću pgAdmin-a

Modificiranje PostgreSQL Poredak

Korak 1) Za ažuriranje drugog kontakta korisnika s ID-om 3, pokrenite sljedeću naredbu:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Korak 2) Pritisnite gumb Izvrši.

Modificiranje PostgreSQL Niz pomoću pgAdmin-a

Korak 3)

1. Upišite sljedeću naredbu u uređivač upita kako biste provjerili je li promjena bila uspješna:

SELECT * FROM Employees;

2. Pritisnite gumb Izvrši.

Modificiranje PostgreSQL Niz pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Modificiranje PostgreSQL Niz pomoću pgAdmin-a

Pretraživanje u a PostgreSQL Poredak

Korak 1) Unesite sljedeći upit u uređivač upita:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Korak 2) Pritisnite gumb Izvrši.

Pretraživanje u a PostgreSQL Niz pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Pretraživanje u a PostgreSQL Niz pomoću pgAdmin-a

Proširujući nizovi

Korak 1) Unesite sljedeći upit u uređivač upita:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Korak 2) Pritisnite gumb Izvrši.

Proširivanje nizova pomoću pgAdmin-a

Trebao bi vratiti sljedeće:

Proširivanje nizova pomoću pgAdmin-a

rezime

  • PostgreSQL omogućuje nam da definiramo stupac tablice kao vrstu polja.
  • Niz mora biti valjan tip podataka kao što su cijeli brojevi, znakovi ili korisnički definirani tipovi.
  • Za umetanje vrijednosti u stupac niza koristimo konstruktor NIZ.
  • Ako postoji više od jednog elementa u istom retku stupca niza, prvi element je na poziciji 1.
  • Svakoj vrijednosti se može pristupiti prosljeđivanjem indeksa unutar uglatih zagrada [].
  • Elementi niza mogu se dohvatiti pomoću naredbe SELECT.
  • Vrijednosti stupca polja mogu se staviti u uglate zagrade [] ili vitičaste zagrade {}.
  • Vrijednosti stupca niza možemo pretraživati ​​pomoću funkcije ANY().

Preuzmite bazu podataka korištenu u ovom vodiču