PostgreSQL Array: Funktioner, Type, Eksempel

Hvad er PostgreSQL Array?

In PostgreSQL, kan vi definere en kolonne som en rรฆkke gyldige datatyper. Datatypen kan vรฆre indbygget, brugerdefineret eller opregnet type. Bortset fra dette spiller arrays en vigtig rolle i PostgreSQL.

Hver tilsvarende PostgreSQL datatypen leveres med en relevant matrixtype. For eksempel har heltalsdatatypen integer[] matrixtypen, karakterdatatypen har karakter[] matrixtypen osv.

Oprettelse af PostgreSQL Arrays

I det fรธlgende eksempel vil vi oprette en tabel med navnet Medarbejdere med kontaktkolonnen defineret som et tekstarray:

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

Kommandoen skal kรธre med succes.

Oprettelse af PostgreSQL Arrays

Indsรฆttelse PostgreSQL Array vรฆrdier

Lad os nu INSERT vรฆrdier i ovenstรฅende tabel:

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

Indsรฆttelsen skal kรธre med succes.

Indsรฆttelse PostgreSQL Array vรฆrdier

Vรฆrdierne i den tredje kolonne, det vil sige kontakt, er blevet indsat som en matrix. Dette er opnรฅet ved brug af ARRAY-konstruktรธren.

I dette eksempel har vi sat dem i firkantede parenteser []. Vi har to kontakter til medarbejderen Alice John.

Det er stadig muligt for os at bruge krรธllede seler {} som vist nedenfor:

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

Kommandoen skal kรธre med succes.

Indsรฆttelse PostgreSQL Array vรฆrdier

Ovenstรฅende udsagn vil indsรฆtte to rรฆkker i tabellen Medarbejdere. Nรฅr du bruger krรธllede klammeparenteser, er arrayet pakket ind i enkelte anfรธrselstegn ('), mens tekstarray-elementerne er pakket ind i dobbelte anfรธrselstegn (").

Forespรธrgsel pรฅ matrixdata

For at forespรธrge pรฅ elementerne i et array bruger vi SELECT-sรฆtningen.

For at se indholdet af vores medarbejdertabel kรธrer vi fรธlgende kommando:

SELECT * FROM Employees;

Dette returnerer fรธlgende:

Forespรธrgsel pรฅ matrixdata

Elementerne i matrixkolonnen, det vil sige kontakt, er blevet omsluttet af krรธllede klammeparenteser {}.

For at fรฅ adgang til selve array-elementerne tilfรธjer vi et subscript inden for firkantede parenteser []. Det fรธrste element i et array er pรฅ position 1.

For eksempel skal vi fรฅ navne pรฅ medarbejdere og kun deres fรธrste kontakt for de medarbejdere med mere end รฉn kontakt. Vi kan fรฅ adgang til dette som kontakt[1].

Lad os se dette:

SELECT name, contact[1]
FROM Employees;

Dette vil returnere fรธlgende:

Forespรธrgsel pรฅ matrixdata

Vi kan bruge SELECT-sรฆtningen sammen med WHERE-sรฆtningen til at filtrere rรฆkker baseret pรฅ array-kolonnen.

For for eksempel at se medarbejderen med (408)-567-78234 som den anden kontakt, kan vi kรธre fรธlgende kommando:

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

Dette vil returnere fรธlgende:

Forespรธrgsel pรฅ matrixdata

ร†ndring PostgreSQL Array

Du kan opdatere hele eller et enkelt element i et array.

Her er indholdet af tabellen Medarbejdere:

ร†ndring PostgreSQL Array

Lad os opdatere det andet telefonnummer pรฅ medarbejderen James Bush, hvis id er 3:

ร†ndring PostgreSQL Array

Kรธr fรธlgende kommando:

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

Kommandoen skal kรธre med succes:

ร†ndring PostgreSQL Array

Lad os forespรธrge i tabellen for at kontrollere, om รฆndringen lykkedes:

ร†ndring PostgreSQL Array

ร†ndringen lykkedes.

Sรธger i en PostgreSQL Array

I รธjeblikket ser vores tabel med medarbejdere ud som fรธlger:

Sรธger i en PostgreSQL Array

Antag, at vi har brug for at vide, hvem der ejer kontakten (408)-783-5731 uanset positionen i kontaktgruppen, kan vi bruge ANY()-funktionen som vist nedenfor:

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

Dette vil returnere fรธlgende:

Sรธger i en PostgreSQL Array

Udvidelse af arrays

Vi kan opdele vรฆrdierne af en matrix i rรฆkker. Denne proces er kendt som matrixudvidelse.

I eksemplet med tabellen Medarbejdere er der nogle medarbejdere med to kontakter i kontaktarrayet. Vi kan opdele disse i separate rรฆkker.

PostgreSQL giver unnest()-funktionen, der kan bruges til dette.

For eksempel:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Dette vil returnere fรธlgende:

Udvidelse af arrays

Medarbejderne Alice John og James Bush, har to kontakter. Vi kan opdele i separate rรฆkker.

Bruger pgAdmin

Oprettelse af PostgreSQL Arrays

For at opnรฅ det samme gennem pgAdmin, gรธr dette:

Trin 1) Log ind pรฅ din pgAdmin-konto.

Trin 2)

  1. Fra navigationslinjen til venstre - Klik pรฅ rbases.
  2. Klik pรฅ Demo-knappen

Oprettelse af PostgreSQL Arrays ved hjรฆlp af pgAdmin

Trin 3) Indtast forespรธrgslen i forespรธrgselseditoren for at oprette tabellen Medarbejdere:

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

Trin 4) Klik pรฅ knappen Udfรธr.

Oprettelse af PostgreSQL Arrays ved hjรฆlp af pgAdmin

Indsรฆttelse PostgreSQL Array vรฆrdier

Trin 1) Indtast fรธlgende forespรธrgsel i forespรธrgselseditoren:

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

Trin 2) Klik pรฅ knappen Udfรธr:

Indsรฆttelse PostgreSQL Array vรฆrdier

Trin 3)

For at bruge krรธllede seler i forespรธrgslen

Trin 1) Indtast fรธlgende forespรธrgsel i forespรธrgselseditoren:

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

Trin 2) Klik pรฅ knappen Udfรธr:

Indsรฆttelse PostgreSQL Array vรฆrdier

Forespรธrgsel pรฅ matrixdata

Trin 1) For at se indholdet af tabellen Medarbejdere skal du skrive fรธlgende forespรธrgsel i forespรธrgselseditoren:

SELECT * FROM Employees;

Trin 2) Klik pรฅ knappen Udfรธr:

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

Trin 3) For at se de fรธrste kontakter med medarbejdere:

  1. Indtast fรธlgende forespรธrgsel i forespรธrgselseditoren:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Klik pรฅ knappen Udfรธr.

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

Trin 4) For at kombinere SELECT-sรฆtningen med WHERE-sรฆtningen:

  1. Indtast fรธlgende kommando i forespรธrgselseditoren:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Klik pรฅ knappen Udfรธr.

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Forespรธrgsel pรฅ matrixdata ved hjรฆlp af pgAdmin

ร†ndring PostgreSQL Array

Trin 1) For at opdatere brugerens anden kontaktperson med id 3 skal du kรธre fรธlgende kommando:

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

Trin 2) Klik pรฅ knappen Udfรธr.

ร†ndring PostgreSQL Array ved hjรฆlp af pgAdmin

Trin 3)

1. Indtast fรธlgende kommando i forespรธrgselseditoren for at kontrollere, om รฆndringen lykkedes:

SELECT * FROM Employees;

2. Klik pรฅ knappen Udfรธr.

ร†ndring PostgreSQL Array ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

ร†ndring PostgreSQL Array ved hjรฆlp af pgAdmin

Sรธger i en PostgreSQL Array

Trin 1) Indtast fรธlgende forespรธrgsel i forespรธrgselseditoren:

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

Trin 2) Klik pรฅ knappen Udfรธr.

Sรธger i en PostgreSQL Array ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Sรธger i en PostgreSQL Array ved hjรฆlp af pgAdmin

Udvidelse af arrays

Trin 1) Indtast fรธlgende forespรธrgsel i forespรธrgselseditoren:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Trin 2) Klik pรฅ knappen Udfรธr.

Udvidelse af arrays ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Udvidelse af arrays ved hjรฆlp af pgAdmin

Resumรฉ

  • PostgreSQL giver os mulighed for at definere en tabelkolonne som en matrixtype.
  • Arrayet skal vรฆre gyldigt datatype sรฅsom heltal, tegn eller brugerdefinerede typer.
  • For at indsรฆtte vรฆrdier i en matrixkolonne bruger vi ARRAY-konstruktรธren.
  • Hvis der er mere end รฉt element i den samme rรฆkke i en matrixkolonne, er det fรธrste element pรฅ position 1.
  • Hver vรฆrdi kan tilgรฅs ved at sende et sรฆnket skrift inden for firkantede parenteser [].
  • Elementerne i arrayet kan hentes ved hjรฆlp af SELECT-sรฆtningen.
  • Vรฆrdierne for matrixkolonnen kan vรฆre omgivet af firkantede parenteser [] eller krรธllede klammer {}.
  • Vi kan sรธge efter matrixkolonnevรฆrdier ved hjรฆlp af ANY()-funktionen.

Download databasen brugt i denne vejledning

Opsummer dette indlรฆg med: