PostgreSQL Array: Funktioner, Typ, Exempel

Vad รคr PostgreSQL Array?

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

Varje motsvarande PostgreSQL datatyp kommer med en relevant matristyp. Till exempel har heltalsdatatypen arraytypen heltal[], teckendatatypen har arraytypen character[] osv.

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 fรถr den tredje kolumnen, det vill sรคga kontakt, har infogats som en matris. Detta har uppnรฅtts med hjรคlp av ARRAY-konstruktorn.

I det hรคr exemplet har vi placerat dem inom 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 om elementen i en array anvรคnder vi SELECT-satsen.

Fรถr att se innehรฅllet i vรฅr tabell med anstรคllda 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 hรคngslen {}.

Fรถr att komma รฅt sjรคlva arrayelementen lรคgger vi till en nedsรคnkning inom hakparenteser []. Det fรถrsta elementet i en array รคr pรฅ position 1.

Vi behรถver till exempel fรฅ namn pรฅ anstรคllda och endast deras fรถrsta kontakt fรถr de anstรคllda med mer รคn en kontakt. Vi kan komma รฅt detta som kontakt[1].

Lรฅt oss se 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-satsen fรถr att filtrera rader baserat pรฅ arraykolumnen.

Till exempel, fรถr att se medarbetaren 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 enstaka element i en array.

Hรคr รคr innehรฅllet i tabellen Anstรคllda:

ร„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 inom 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 fรถr en array i rader. Denna process รคr kรคnd som arrayexpansion.

I exemplet med tabellen Anstรคllda finns det nรฅgra anstรคllda med tvรฅ kontakter i kontaktgruppen. Vi kan dela upp dessa i separata rader.

PostgreSQL tillhandahรฅller unnest()-funktionen 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 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. Frรฅn navigeringsfรคltet till vรคnster- Klicka pรฅ rbases.
  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 lockiga hรคngslen i frรฅgan

Steg 1) Skriv in 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"}'
   );

Steg 2) Klicka pรฅ knappen Kรถ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 med anstรคllda:

  1. Skriv in fรถljande frรฅga i frรฅgeredigeraren:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Klicka pรฅ knappen Kรถr.

Frรฅga arraydata med pgAdmin

Det bรถr returnera fรถljande:

Frรฅga arraydata med pgAdmin

Steg 4) Sรฅ hรคr kombinerar du SELECT-satsen med WHERE-satsen:

  1. Skriv fรถljande kommando i frรฅgeredigeraren:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Klicka pรฅ knappen Kรถr.

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)

1. Skriv fรถljande kommando i frรฅgeredigeraren fรถr att kontrollera om รคndringen lyckades:

SELECT * FROM Employees;

2.Klicka pรฅ knappen Execute.

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

Sammanfattning

  • PostgreSQL tillรฅter oss att definiera en tabellkolumn som en matristyp.
  • Arrayen mรฅste vara giltig data typ sรฅsom heltal, tecken eller anvรคndardefinierade typer.
  • Fรถr att infoga vรคrden i en matriskolumn anvรคnder vi ARRAY-konstruktorn.
  • Om det finns mer รคn ett element i samma rad i en matriskolumn, รคr det fรถrsta elementet pรฅ position 1.
  • Varje vรคrde kan nรฅs genom att skicka en nedsรคnkt skrift inom hakparenteser [].
  • Elementen i arrayen kan hรคmtas med hjรคlp av SELECT-satsen.
  • Vรคrdena fรถr arraykolumnen kan omges av hakparenteser [] eller klammerparenteser {}.
  • Vi kan sรถka efter matriskolumnvรคrden med funktionen ANY() .

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

Sammanfatta detta inlรคgg med: