PostgreSQL Array: Funktioner, Typ, Exempel

โšก Smart sammanfattning

PostgreSQL Med Array kan du definiera en tabellkolumn som en array av valfri giltig datatyp. Den tรคcker hur man skapar arraykolumner, infogar vรคrden med ARRAY-konstruktorn eller klammerparenteser, frรฅgar och modifierar element och sรถker med ANY().

  • ๐Ÿ“ฆ Definition: Vilken som helst PostgreSQL datatypen har en matchande arraytyp, till exempel heltal[].
  • ๐Ÿงฑ Skapa och infoga: Anvรคnd TEXT[]-kolumner och ARRAY-konstruktorn eller klammerparenteser.
  • ๐Ÿ”Ž Frรฅga: ร…tkomst till element med nedsรคnkta tecken; det fรถrsta elementet รคr pรฅ position 1.
  • โœ๏ธ ร„ndra och sรถk: Uppdatera enskilda element och sรถkvรคrden med ANY().
  • โž— Bygga ut: Funktionen unnest() delar upp arrayvรคrden i separata rader.

PostgreSQL array

Vad รคr PostgreSQL Array?

In PostgreSQL, kan vi definiera en kolumn som en array av giltiga datatyper. Datatypen kan vara inbyggd, anvรคndardefinierad eller en upprรคknad typ. Utรถver detta spelar arrayer en viktig roll i PostgreSQL.

Varje motsvarande PostgreSQL Datatypen levereras med en relevant arraytyp. Till exempel har datatypen heltal arraytypen heltal[], datatypen tecken har arraytypen tecken[] och sรฅ vidare.

Skapa PostgreSQL arrayer

I fรถljande exempel kommer vi att skapa en tabell med namnet Anstรคllda med kontaktkolumnen definierad som en textmatris:

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

Kommandot bรถr kรถras framgรฅngsrikt.

Skapa PostgreSQL arrayer

Sรคtta PostgreSQL Matrisvรคrden

Lรฅt oss nu infoga vรคrden i tabellen ovan:

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

Insรคttningen bรถr fungera framgรฅngsrikt.

Sรคtta PostgreSQL Matrisvรคrden

Vรคrdena i den tredje kolumnen, det vill sรคga kontakt, har infogas som en array. Detta har uppnรฅtts med hjรคlp av ARRAY-konstruktorn. I det hรคr exemplet har vi omgivit dem med hakparenteser []. Vi har tvรฅ kontakter fรถr medarbetaren Alice John.

Det รคr fortfarande mรถjligt fรถr oss att anvรคnda lockiga hรคngslen {} som visas nedan:

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

Kommandot bรถr kรถras framgรฅngsrikt.

Sรคtta PostgreSQL Matrisvรคrden

Ovanstรฅende uttalanden kommer att infoga tvรฅ rader i tabellen Anstรคllda. Nรคr du anvรคnder hรคngslen lindas arrayen inom enkla citattecken (') medan textarrayobjekten lindas inom dubbla citattecken (โ€œ).

Frรฅgar matrisdata

Fรถr att frรฅga elementen i en array anvรคnder vi SELECT-satsen. Fรถr att se innehรฅllet i vรฅr Employees-tabell kรถr vi fรถljande kommando:

SELECT * FROM Employees;

Detta returnerar fรถljande:

Frรฅgar matrisdata

Elementen i arraykolumnen, det vill sรคga kontakt, har omslutits av klammerparenteser {}. Fรถr att komma รฅt sjรคlva arrayelementen lรคgger vi till en nedsรคnkt linje inom hakparenteser []. Det fรถrsta elementet i en array รคr pรฅ position 1.

Till exempel behรถver vi fรฅ namnen pรฅ anstรคllda och endast deras fรถrsta kontaktperson fรถr de anstรคllda som har mer รคn en kontaktperson. Vi kan komma รฅt detta som kontakt[1]. Lรฅt oss se pรฅ detta:

SELECT name, contact[1]
FROM Employees;

Detta kommer att returnera fรถljande:

Frรฅgar matrisdata

Vi kan anvรคnda SELECT-satsen tillsammans med WHERE-klausulen fรถr att filtrera rader baserat pรฅ arraykolumnen. Fรถr att till exempel se den anstรคllde med (408)-567-78234 som den andra kontakten kan vi kรถra fรถljande kommando:

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

Detta kommer att returnera fรถljande:

Frรฅgar matrisdata

ร„ndra PostgreSQL array

Du kan uppdatera hela eller ett enskilt element i en array. Hรคr รคr innehรฅllet i tabellen Employees:

ร„ndra PostgreSQL array

Lรฅt oss uppdatera det andra telefonnumret till den anstรคllde James Bush, vars ID รคr 3:

ร„ndra PostgreSQL array

Kรถr fรถljande kommando:

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

Kommandot bรถr kรถras framgรฅngsrikt:

ร„ndra PostgreSQL array

Lรฅt oss frรฅga tabellen fรถr att kontrollera om รคndringen lyckades:

ร„ndra PostgreSQL array

Fรถrรคndringen var framgรฅngsrik.

Sรถker i en PostgreSQL array

Fรถr nรคrvarande รคr vรฅr personaltabell fรถljande:

Sรถker i en PostgreSQL array

Anta att vi behรถver veta vem som รคger kontakten (408)-783-5731 oavsett position i kontaktmatrisen. Vi kan anvรคnda funktionen ANY() enligt nedan:

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

Detta kommer att returnera fรถljande:

Sรถker i en PostgreSQL array

Expanderande matriser

Vi kan dela upp vรคrdena i en array i rader. Denna process kallas arrayexpansion. I exemplet med tabellen Employees finns det nรฅgra anstรคllda med tvรฅ kontakter i kontaktarrayen. Vi kan dela upp dessa i separata rader. PostgreSQL tillhandahรฅller funktionen unnest() som kan anvรคndas fรถr detta. Till exempel:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Detta kommer att returnera fรถljande:

Expanderande matriser

De anstรคllda Alice John och James Bush har tvรฅ kontakter. Vi kan dela upp dessa i separata rader.

Anvรคnder pgAdmin

Skapa PostgreSQL arrayer

Fรถr att รฅstadkomma samma sak genom pgAdmin, gรถr sรฅ hรคr:

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2)

  1. Klicka pรฅ Databaser i navigeringsfรคltet till vรคnster.
  2. Klicka pรฅ Demo-knappen.

Skapa PostgreSQL Arrayer som anvรคnder pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren fรถr att skapa tabellen Anstรคllda:

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

Steg 4) Klicka pรฅ knappen Kรถr.

Skapa PostgreSQL Arrayer som anvรคnder pgAdmin

Sรคtta PostgreSQL Matrisvรคrden

Steg 1) Skriv in fรถljande frรฅga i frรฅgeredigeraren:

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

Steg 2) Klicka pรฅ knappen Kรถr:

Sรคtta PostgreSQL Matrisvรคrden

Steg 3) Fรถr att anvรคnda klammerparenteser i frรฅgan skriver du fรถljande frรฅga i frรฅgeredigeraren:

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

Klicka sedan pรฅ knappen Utfรถr:

Sรคtta PostgreSQL Matrisvรคrden

Frรฅgar matrisdata

Steg 1) Fรถr att se innehรฅllet i tabellen Anstรคllda skriver du fรถljande frรฅga i frรฅgeredigeraren:

SELECT * FROM Employees;

Steg 2) Klicka pรฅ knappen Kรถr:

Frรฅga arraydata med pgAdmin

Det bรถr returnera fรถljande:

Frรฅga arraydata med pgAdmin

Steg 3) Fรถr att se de fรถrsta kontakterna till anstรคllda, skriv fรถljande frรฅga i frรฅgeredigeraren och klicka pรฅ knappen Kรถr:

SELECT name, contact[1]
FROM Employees;

Frรฅga arraydata med pgAdmin

Det bรถr returnera fรถljande:

Frรฅga arraydata med pgAdmin

Steg 4) Fรถr att kombinera SELECT-satsen med WHERE-satsen skriver du fรถljande kommando i frรฅgeredigeraren och klickar pรฅ knappen Kรถr:

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

Frรฅga arraydata med pgAdmin

Det bรถr returnera fรถljande:

Frรฅga arraydata med pgAdmin

ร„ndra PostgreSQL array

Steg 1) Fรถr att uppdatera anvรคndarens andra kontakt med ID 3, kรถr fรถljande kommando:

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

Steg 2) Klicka pรฅ knappen Kรถr.

ร„ndra PostgreSQL Array med pgAdmin

Steg 3) Skriv fรถljande kommando i frรฅgeredigeraren fรถr att kontrollera om รคndringen lyckades och klicka sedan pรฅ knappen Utfรถr:

SELECT * FROM Employees;

ร„ndra PostgreSQL Array med pgAdmin

Det bรถr returnera fรถljande:

ร„ndra PostgreSQL Array med pgAdmin

Sรถker i en PostgreSQL array

Steg 1) Skriv in fรถljande frรฅga i frรฅgeredigeraren:

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

Steg 2) Klicka pรฅ knappen Kรถr.

Sรถker i en PostgreSQL Array med pgAdmin

Det bรถr returnera fรถljande:

Sรถker i en PostgreSQL Array med pgAdmin

Expanderande matriser

Steg 1) Skriv in fรถljande frรฅga i frรฅgeredigeraren:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Steg 2) Klicka pรฅ knappen Kรถr.

Expandera arrayer med pgAdmin

Det bรถr returnera fรถljande:

Expandera arrayer med pgAdmin

Ladda ner den databas som anvรคnds i denna handledning

Vanliga frรฅgor

Ja. AI-assistenter kan skriva CREATE TABLE-satser med arraykolumner, INSERT-kommandon med ARRAY eller klammerparenteser och funktioner som unnest() eller ANY(). Testa den genererade SQL-koden pรฅ ditt schema innan du kรถr den.

Ja. AI-verktyg kan ge rรฅd om huruvida en arraykolumn eller en normaliserad underordnad tabell passar dina data. Arrayer passar smรฅ, fasta listor, medan separata tabeller passar stora eller ofta efterfrรฅgade relationer. Validera med dina frรฅgemรถnster.

Anvรคnd funktionen array_length(array, dimension). Till exempel returnerar array_length(contact, 1) antalet element i den fรถrsta dimensionen av kontaktmatrisen.

Ja. Anvรคnd funktionen array_append(array, value) eller konkateneringsoperatorn ||. Till exempel lรคgger UPDATE Employees SET contact = array_append(contact, '(408)-000-0000') till ett nytt element.

Sammanfatta detta inlรคgg med: