PODSTAWY BAZ DANYCH

Podstawy baz danych 05

Baza

DVD Rental Service

source

Arrays

'{27000,27000}'
ARRAY[27000, 27000]
CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);
CREATE TABLE tictactoe (
    squares   integer[3][3]
);
INSERT INTO sal_emp
    VALUES ('Bill',
    ARRAY[10000, 10000, 10000, 10000],
    ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);

INSERT INTO sal_emp
    VALUES ('Carol',
    ARRAY[20000, 25000, 25000, 25000],
    ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']]);
SELECT schedule[1:2][1:1] FROM sal_emp WHERE name = 'Bill';
SELECT schedule[1:2][2] FROM sal_emp WHERE name = 'Bill';
SELECT schedule[:2][2:] FROM sal_emp WHERE name = 'Bill';
SELECT schedule[:][1:1] FROM sal_emp WHERE name = 'Bill';
SELECT
   name,
   pay_by_quarter
FROM
   sal_emp
WHERE
   10000 = ANY (pay_by_quarter);

JSONB

CREATE TABLE config (
   ID serial NOT NULL PRIMARY KEY,
   value jsonb NOT NULL
);
INSERT INTO config (value)
VALUES
   (
      '{ "api-key": "AASzzQ!@#)(_*44*_)", "active": true, "roles": ["admin", "sudo"]}'
   );
INSERT INTO config (value)
VALUES
   (
      '{ "api-key": "  $%^&*( --w*", "active": "off", "roles": [], "opts": { "on": true}}'
   );
SELECT
   value -> 'api-key' AS "api-key"
FROM
   config
SELECT
   value -> 'opts' ->> 'on' AS "opts-on"
FROM
   config
SELECT *
FROM config
WHERE value -> 'opts' ->> 'on' IS TRUE
SELECT *
FROM config
WHERE (value -> 'opts' ->> 'on')::bool IS TRUE

SELECT *
FROM config
WHERE CAST(value -> 'opts' ->> 'on' AS BOOLEAN) IS TRUE

Ćwiczenia

  1. Uruchomic przykłady.
  2. Utworzyć nową tabele new_customer (na podstawie tabeli customer) zastąpić pole address_id polem address (typ: jsonb), utworzyć nowych customer-ów w tabeli new_customer. Przepisać dane z tabeli customer do new_customer tak aby zawiera adres w polu address.

hints

CREATE TABLE [Table to copy To]
AS [Table to copy From]
WITH NO DATA;
INSERT INTO [Table to copy To]
SELECT [Columns to Copy]
FROM [Table to copy From]
WHERE [Optional Condition];
INSERT INTO new_customer (SELECT customer_id, .... FROM customer WHERE...)