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