PostgreSQL Array: Funktioner, Type, Eksempel

โšก Smart opsummering

PostgreSQL Med Array kan du definere en tabelkolonne som et array af enhver gyldig datatype. Det dรฆkker oprettelse af arraykolonner, indsรฆttelse af vรฆrdier med ARRAY-konstruktรธren eller krรธllede parenteser, forespรธrgsler om og รฆndring af elementer og sรธgning med ANY().

  • ๐Ÿ“ฆ Definition: Enhver PostgreSQL datatypen har en matchende arraytype, f.eks. integer[].
  • ๐Ÿงฑ Opret og indsรฆt: Brug TEXT[]-kolonner og ARRAY-konstruktรธren eller krรธllede parenteser.
  • ๐Ÿ”Ž Forespรธrgsel: Adgang til elementer med indeks; det fรธrste element er pรฅ position 1.
  • โœ๏ธ Rediger og sรธg: Opdater enkelte elementer og sรธgevรฆrdier med ANY().
  • โž— Udvide: Funktionen unnest() opdeler arrayvรฆrdier i separate rรฆkker.

PostgreSQL Array

Hvad er PostgreSQL Array?

In PostgreSQL, kan vi definere en kolonne som et array af gyldige datatyper. Datatypen kan vรฆre indbygget, brugerdefineret eller en optรฆllet type. Derudover spiller arrays en vigtig rolle i PostgreSQL.

Hver tilsvarende PostgreSQL Datatypen leveres med en relevant arraytype. For eksempel har integer-datatypen integer[] arraytypen, character-datatypen har character[] arraytypen 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, dvs. kontakt, er blevet indsat som et array. Dette er opnรฅet ved hjรฆlp af ARRAY-konstruktรธren. I dette eksempel har vi omsluttet dem i firkantede parenteser []. Vi har to kontakter for 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 elementerne i et array bruger vi SELECT-sรฆtningen. For at se indholdet af vores Employees-tabel kรธrer vi fรธlgende kommando:

SELECT * FROM Employees;

Dette returnerer fรธlgende:

Forespรธrgsel pรฅ matrixdata

Elementerne i arraykolonnen, dvs. kontakt, er omsluttet af krรธllede parenteser {}. For at fรฅ adgang til selve arrayelementerne tilfรธjer vi et sรฆnket skrift i firkantede parenteser []. Det fรธrste element i et array er pรฅ position 1.

For eksempel skal vi have navnene pรฅ medarbejdere og kun deres fรธrste kontaktperson for de medarbejdere med mere end รฉn kontaktperson. Vi kan tilgรฅ dette som kontaktperson[1]. Lad os se pรฅ 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-klausulen til at filtrere rรฆkker baseret pรฅ array-kolonnen. For eksempel, for 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 placeringen i kontaktarrayet. Vi kan bruge funktionen ANY() 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 i et array i rรฆkker. Denne proces kaldes arrayudvidelse. I eksemplet med tabellen Medarbejdere er der nogle medarbejdere med to kontakter i kontaktarrayet. Vi kan opdele disse i separate rรฆkker. PostgreSQL leverer funktionen unnest(), 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 disse 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. Klik pรฅ Databaser i navigationslinjen til venstre.
  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 parenteser i forespรธrgslen skal du skrive 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"}'
   );

Klik derefter 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 fra medarbejdere skal du skrive fรธlgende forespรธrgsel i forespรธrgselseditoren og klikke pรฅ knappen Udfรธr:

SELECT name, contact[1]
FROM Employees;

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-klausulen skal du skrive fรธlgende kommando i forespรธrgselseditoren og klikke pรฅ knappen Udfรธr:

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

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 kontakt med et id pรฅ 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) Skriv fรธlgende kommando i forespรธrgselseditoren for at kontrollere, om รฆndringen var vellykket, og klik derefter pรฅ knappen Udfรธr:

SELECT * FROM Employees;

ร†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

Download databasen brugt i denne vejledning

Ofte Stillede Spรธrgsmรฅl

Ja. AI-assistenter kan skrive CREATE TABLE-sรฆtninger med array-kolonner, INSERT-kommandoer ved hjรฆlp af ARRAY eller krรธllede parenteser og funktioner som unnest() eller ANY(). Test den genererede SQL pรฅ dit skema, fรธr du kรธrer det.

Ja. AI-vรฆrktรธjer kan rรฅdgive om, hvorvidt en arraykolonne eller en normaliseret undertabel passer til dine data. Arrays passer til smรฅ, faste lister, mens separate tabeller passer til store eller ofte forespรธrgte relationer. Valider med dine forespรธrgselsmรธnstre.

Brug funktionen array_length(array, dimension). For eksempel returnerer array_length(contact, 1) antallet af elementer i den fรธrste dimension af kontaktarrayet.

Ja. Brug funktionen array_append(array, value) eller sammenkรฆdningsoperatoren ||. For eksempel tilfรธjer UPDATE Employees SET contact = array_append(contact, '(408)-000-0000') et nyt element.

Opsummer dette indlรฆg med: