POSTGRESQL (Postgres)
|
|
- Anna Czyż
- 8 lat temu
- Przeglądów:
Transkrypt
1 POSTGRESQL (Postgres) PostgreSQL obiektowo-relacyjny SZBD oparty na Postgresie rozwijanym w University of California at Berkeley, Computer Science Department. POSTGRES pierwszy wprowadził wiele konstrukcji, które potem zostały wprowadzone do innych komercyjnych systemów. PostgreSQL jest potomkiem oryginalnego, otwartego kodu opracowanego w Uniwersytecie w Berkeley. W wielu miejscach podobny do Oracle z PL/SQL. Uważany za wzorcowy system. W dokumentacji częste porównania ze Standardem SQL. psql standardowy interaktywny program kliencki PostgreSQL: $ psql mydb \q - wyjście z psql 1
2 Rozszerzenia proceduralne SQL Standard SQL/PSM (SQL/Persistent Stored Modules) Microsoft, Sybase TransactSQL Oracle PL/SQL DB2 SQL/PL PostgreSQL PL/pgSQL, PL/PSM MySQL MySQL SQL/PSM 2
3 Warto zwrócić uwagę w PostgreSQL v Open Source v Reguły v Typy złożone: enum, array, wierszowy, rekordowy (tworzony przy użyciu CREATE TYPE) v Wzorce przy tworzeniu bazy danych v Definiowanie zdarzeń v Składowanie danych metodą TOAST 3
4 Klaster, baza danych, schemat Klaster zbiór baz danych zarządzany przez pojedynczą instancję serwera PostgreSQL. Baza danych (w standardzie katalog) składa się ze schematów. CREATE SCHEMA myschema; database.schema.table DROP SCHEMA myschema [CASCADE]; CREATE SCHEMA schemaname AUTHORIZATION username; -- utworzenie schematu i ustalenie właściciela schematu Dla każdej bd automatycznie tworzony jest domyślny schemat public SET search_path TO myschema; -- bieżący schemat 4
5 SQL SELECT version(); SELECT current_date; SELECT random(); SELECT * FROM Osoby ORDER BY nazwisko LIMIT 5; -- wyświetlone 5 wierszy SELECT * FROM Osoby ORDER BY nazwisko LIMIT 3 OFFSET 3; -- wyświetlone 3 wiersze poczynając od 4 Kolejność ewaluacji podwyrażeń nie jest zdefiniowana (optymalizator może sam sobie wybrać kolejność). 5
6 Tworzenie tabeli CREATE TABLE Cities ( name varchar(80) PRIMARY KEY, location point); CREATE TABLE Weather ( city varchar(80) REFERENCES Cities(name), temp_lo int, temp_hi int, prcp real, date date); Point typ danych specyficzny dla PostgreSQL. 6
7 SERIAL, DEFAULT CREATE TABLE Products ( product_no SERIAL PRIMARY KEY, name text, price numeric DEFAULT 9.99, data timestamp DEFAULT now() ); SERIAL - generowanie jednoznacznego numeru (realizowane wewnętrznie przez sekwencję) Text = Varchar = Character Varying (do ok. 1GB) 7
8 Sekwencje CREATE SEQUENCE numer START 101; SELECT nextval('numer'); nextval currval('numer') W Oracle podobnie ale jest używana notacja obiektowa numer.nextval, numer.currval. 8
9 Funkcje warunkowe CASE WHEN condition THEN result [WHEN...] [ELSE result] END COALESCE(value [,...]) NULLIF(value1, value2) - if value1=value2 then null GREATEST(value [,...]) LEAST(value [,...]) 9
10 Określanie (konwersja) typu Specyfikacja typu wartości: SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label value Origin (0,0) (1 row) lub CAST('2.2' AS REAL); 10
11 Systemowe kolumny tabeli v v v v OID identyfikator obiektowy wiersza dla tabel (obiektowych) tworzonych z opcją WITH OIDS tableoid identyfikator tabeli; użyteczne przy hierarchiach tabel xmin id transakcji wstawiającej/aktualizującej wiersz cmin id modyfikującej instrukcji w ramach transakcji v xmax - id transakcji usuwającej wiersz lub 0 v cmax id instrukcji usuwającej lub 0 v ctid fizyczne miejsce wiersza (aktualne dopóki wiersz nie zmieni położenia w pliku). 11
12 ALTER TABLE ALTER TABLE products ADD COLUMN description text CHECK (description <> ''); ALTER TABLE products DROP COLUMN description; ALTER TABLE products DROP COLUMN description CASCADE; -- usunięcie kolumny razem z więzami klucza obcego ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups; ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; -- dodanie więzów NOT NULL ALTER TABLE products ALTER COLUMN price SET DEFAULT 7; ALTER TABLE products DROP CONSTRAINT some_name; ALTER TABLE prods ALTER COLUMN price TYPE numeric(10,2); ALTER TABLE prods RENAME COLUMN prod_no TO prod_numb; ALTER TABLE products RENAME TO items; 12
13 Instrukcje SQL INSERT INTO Weather VALUES ('San Francisco', 46, 50, 0.25, ' '); INSERT INTO Cities VALUES ('San Francisco', '(-194.0, 53.0)'); COPY Weather FROM '/home/user/weather.txt'; SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM Weather; SELECT * FROM Weather INNER JOIN Cities ON (Weather.city = Cities.name); INSERT INTO Products (product_no, name, price) VALUES (1, 'Cheese', 9.99), (2, 'Bread', 1.99), (3, 'Milk', 2.99); 13
14 DISTINCT ON SELECT DISTINCT ON(deptno) deptno, ename FROM Emp; Wszystkie wiersze z tą samą wartością deptno są uważane jako duplikaty. Z tego zbioru jest wybierany jeden reprezentant. Nie występuje w Standardzie. SELECT DISTINCT ON (expression [, expression...]) 14
15 Operatory zbiorowe query1 UNION [ALL] query2 query1 INTERSECT [ALL] query2 query1 EXCEPT [ALL] query2 ALL bez eliminacji duplikatów 15
16 Akcje referencyjne RESTRICT, NO ACTION zapobiega usunięciu wiersza powiązanego więzami klucza obcego. - NO ACTION sprawdzanie więzów przełożone na koniec transakcji, - RESTRICT sprawdzanie natychmiast. CASCADE usuń również powiązane wiersze. SET NULL, SET DEFAULT (ale jeśli wartość domyślna nie spełnia warunku klucza obcego, cała operacja usunięcia nie powiedzie się). 16
17 Rozszerzalność SQL v v v v Typy danych Funkcje Reguły Wyzwalacze 17
18 Typy danych v v v v bazowe w SQL (w tym boolean) dziedziny - typ bazowy z więzami spójności, tworzone przez CREATE DOMAIN złożone w tym CREATE TYPE pseudo-typy - nie mogą być typami danych kolumn w tabeli ani atrybutów typów złożonych; możliwe jako typy argumentów i wyników funkcji np. any - dowolny typ danych, record - dowolny typ wierszowy polimorficzne - pseudotypy: anyelement, anyarray, anyenum. Funkcje, które je używają, nazywają się polimorficzne. 18
19 Typy enumeracyjne CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); CREATE TABLE Person ( name text, current_mood mood ); INSERT INTO Person VALUES ('Moe', 'happy'); SELECT * FROM Person WHERE current_mood = 'happy'; name current_mood Moe happy (1 row) Uporządkowanie wartości zgodne z kolejnością w definicji typu 19
20 Typy tablicowe (array) CREATE TABLE Sal_emp ( Name text, Pay_by_quarter integer[], Schedule text[][] ); Również składnia ze Standardu (długości wektorów nie są sprawdzane): Pay_by_quarter integer ARRAY[4], 20
21 Typy rekordowe CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric ); CREATE TABLE on_hand ( item inventory_item, count integer ); INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.9), 100); Inny zapis konstruktora ROW: ' (''fuzzy dice'', 42, 1.99) ' W typie rekordowym nie ma więzów spójności (na razie). 21
22 Konstruktor rekordu - ROW SELECT ROW(1,2.5,'this is a test'); SELECT ROW(T.f1,T.f2, 42) FROM T; 22
23 Typ wierszowy dla tabeli CREATE TABLE Inventory_item ( name text, supplier_id integer REFERENCES suppliers, price numeric CHECK (price > 0) ); Automatycznie jest tworzony typ rekordowy odpowiadający wierszom tej tabeli o tej samej nazwie Inventory_item W typie rekordowym nie są brane pod uwagę więzy spójności. 23
24 CREATE DOMAIN CREATE DOMAIN US_postal_code AS TEXT CHECK( VALUE ~ '^\\d{5}$' OR VALUE ~ '^\\d{5}-\\d{4}$' ); CREATE TABLE US_snail_addy ( address_id SERIAL PRIMARY KEY, street1 TEXT NOT NULL, street2 TEXT, street3 TEXT, city TEXT NOT NULL, postal US_postal_code NOT NULL); 24
25 Funkcje SQL -- Ciąg instrukcji SQL. -- Ostatnia instrukcja zwraca rezultat funkcji - musi być SELECT, chyba, że typ funkcji jest określony jako void (wtedy jest procedurą). -- Ciało funkcji w postaci napisu (string) z separatorami albo ' albo $<znacznik>$ -- Nie można używać instrukcji dotyczących transakcji. CREATE FUNCTION clean_emp() RETURNS void AS 'DELETE FROM emp WHERE salary < 0; ' LANGUAGE SQL; SELECT clean_emp(); clean_emp (1 row) 25
26 Przykłady funkcji CREATE FUNCTION tf1 (integer, numeric) RETURNS numeric AS $$ UPDATE Bank SET balance = balance - $2 WHERE accountno = $1; SELECT balance FROM Bank WHERE accountno = $1; $$ LANGUAGE SQL; Parametry funkcji: $1, $2, - mogą być typu wierszowego CREATE FUNCTION double_salary (Emp) RETURNS numeric AS $$ SELECT $1.salary * 2 AS salary; $$ LANGUAGE SQL; SELECT ename, double_salary(emp.*) FROM Emp; 26
27 Przykład Funkcja typu wierszowego: CREATE FUNCTION new_emp(text) RETURNS Emp AS $$ SELECT $1 AS name, AS salary; $$ LANGUAGE SQL; SELECT (new_emp('kowalski')).name; -- konieczne nawiasy name Kowalski 27
28 Kategorie stabilności funkcji informacja dla optymalizatora v v v v Zmienna (volatile) każde wywołanie może zwracać inną wartość, funkcja może zmienić stan bazy danych. Nie poddaje się optymalizacji. Stabilna (stable) - każde wywołanie dla tych samych argumentów zwraca tę samą wartość w ramach wykonania aktualnej instrukcji SQL, funkcja nie zmienia stanu bazy danych. Niezmienna (immutable) - każde wywołanie dla tych samych argumentów zwraca zawsze tę samą wartość, funkcja nie zmienia stanu bazy danych. W CREATE FUNCTION określone przez słowa kluczowe: IMMUTABLE STABLE VOLATILE 28
29 Reguły Query rewrite rule system reguły przekształcania zapytań działają po zbudowaniu drzewa zapytania przez parser przed skierowaniem drzewa zapytania do optymalizatora. Podobne do wyzwalaczy. Np. typ SERIAL jest realizowany przy pomocy sekwencji. Użycie perspektywy jest realizowane wewnętrznie za pomocą tabeli i reguły np. CREATE VIEW Myview AS SELECT * FROM Mytab; Realizowane jako: CREATE TABLE Myview (te same kolumny jak w mytab); CREATE RULE "_RETURN" AS ON SELECT TO Myview DO INSTEAD SELECT * FROM Mytab; 29
30 Składnia reguły CREATE RULE name AS ON event TO object DO [ ALSO INSTEAD ] { NOTHING command (command;... ) } - w przypadku event=select tylko jedno command Przykład CREATE RULE MyTab_ins_protect AS ON INSERT TO MyTab DO INSTEAD NOTHING; Aby zrealizować modyfikację danych poprzez perspektywę, trzeba dla niej napisać odpowiednia regułę. 30
31 PL/pgSQL Proceduralny język do zapisu funkcji, wyzwalaczy. Kod składowany i wykonywany po stronie serwera bazy danych zmniejsza ruch w sieci między klientem a serwerem. Funkcje mogą być typu void oraz mieć parametry wyjściowe (czyli mieć charakter procedur). Blok: [ <<label>> ] [ DECLARE deklaracje ] BEGIN instrukcje EXCEPTION WHEN warunek THEN instrukcje_obsługi_wyjątków END [label] 31
32 Przykład funkcji w PL/pgSQL CREATE FUNCTION somefunc() RETURNS integer AS $$ << outerblock >> DECLARE quantity integer := 30; BEGIN RAISE NOTICE 'Quantity here is %', quantity; -- Prints 30 quantity := 50; DECLARE quantity integer := 80; BEGIN RAISE NOTICE 'Quantity here is', quantity; -- Prints 80 RAISE NOTICE 'Outer quantity is', outerblock.quantity; -- Prints 50 END; RAISE NOTICE 'Quantity here is %', quantity; -- Prints 50 RETURN quantity; END outerblock; $$ LANGUAGE plpgsql; 32
33 Aliasy dla parametrów funkcji CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$ BEGIN RETURN subtotal * 0.06; END; $$ LANGUAGE plpgsql; CREATE FUNCTION sum_n_product( x int, y int, OUT sum int, OUT prod int) $$ BEGIN sum := x + y; prod := x * y; END;$$ LANGUAGE plpgsql; AS 33
34 Klauzula INTO SELECT select_expressions INTO [STRICT] target FROM...; INSERT... RETURNING expressions INTO [STRICT] target; UPDATE... RETURNING expressions INTO [STRICT] target; DELETE... RETURNING expressions INTO [STRICT] target; STRICT: zgłaszane są wyjątki NO_DATA_FOUND i TOO_MANY_ROWS; bez STRICT: wynikiem pierwszy wiersz lub NULLe. BEGIN SELECT * INTO STRICT myrec FROM Emp WHERE ename = x; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'employee % not found', x; WHEN TOO_MANY_ROWS THEN RAISE EXCEPTION 'employee % not unique', x; END; 34
35 PERFORM Gdy funkcja wywoływana w kodzie ma nie zwracać wartości: PERFORM create_mv('cs_session_page_requests_mv', my_query); 35
36 Dynamiczny SQL EXECUTE command-string [ INTO [STRICT] target ]; command-string napis instrukcji do wykonania dynamicznie target zmienna rekordowa, wierszowa lub lista zmiennych 36
37 Diagnostyka 1. Liczba wierszy zwróconych przez ostatnią instrukcję: GET DIAGNOSTICS integer_var = ROW_COUNT; 2. Zmienna FOUND czy ostania instrukcja (w tym PERFORM) zwróciła co najmniej jeden wiersz: SELECT * INTO myrec FROM Emp WHERE empname = myname; IF NOT FOUND THEN RAISE EXCEPTION 'employee % not found', myname; END IF; Instrukcja NULL i podnoszenie wyjątku: BEGIN y := x / 0; EXCEPTION WHEN division_by_zero THEN NULL; -- nic nie rób END; 37
38 Zmienne SQLSTATE i SQLERRM Wewnątrz sekcji wyjątków są dostępne informacje o zaistniałym błędzie: SQLSTATE numer błędu, SQLERRM komunikat o błędzie. 38
39 Instrukcja RAISE RAISE level 'format' [, expression [,...]]; level = DEBUG, LOG, INFO, NOTICE, WARNING, EXCEPTION RAISE NOTICE 'Calling cs_create_job(%)', v_job_id; 39
40 Gdy typem wyniku funkcji jest SETOF sometype Budowa zbioru wyników dla funkcji za pomocą RETURN NEXT expression,.., expression; -- zwraca wiersz RETURN QUERY query; -- zwraca zbiór wierszy Zakończenie za pomocą RETURN bez podawania wartości. Początek przykładu: CREATE TABLE Foo ( fooid INT, foosubid INT, fooname TEXT); INSERT INTO Foo VALUES (1, 2, 'three'); INSERT INTO Foo VALUES (4, 5, 'six'); 40
41 CREATE OR REPLACE FUNCTION get() RETURNS SETOF Foo AS $BODY$ DECLARE r Foo%rowtype; BEGIN FOR r IN SELECT * FROM Foo WHERE fooid > 0 LOOP RETURN NEXT r; -- przekaż aktualny wiersz END LOOP; RETURN; -- koniec wykonywania funkcji END $BODY$ LANGUAGE 'plpgsql'; SELECT * FROM get(); 41
42 Wyzwalacze Definiowane przez bezparametrową funkcję typu trigger (w nagłówku RETURNS trigger). Rodzaje: [wierszowe dla instrukcji] [BEFORE AFTER] [INSERT DELETE UPDATE]. Funkcje wyzwalaczy dla instrukcji powinny zwracać (przez RETURN) NULL. Funkcje wyzwalaczy wierszowych BEFORE zwracają: NULL oznacza nie wykonywać operacji; przekazywany przez funkcję wiersz (przy INSERT, UPDATE) - zostaje wstawiony do tabeli a przy DELETE - usunięty. Jeśli kilka wyzwalaczy: wyjście z poprzedniego jest przekazywane na wejście następnego (w kolejności alfabetycznej nazw). 42
43 Funkcje wyzwalaczy w PL/pgSQL NEW, OLD - dane typu RECORD Przykład: CREATE TABLE Emp ( empname text, salary integer, last_date timestamp, last_user text); CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON Emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); 43
44 CREATE FUNCTION emp_stamp() RETURNS trigger AS $$ BEGIN -- Sprawdzenie czy podano nazwisko i zarobki IF NEW.empname IS NULL THEN RAISE EXCEPTION 'empname cannot be null'; END IF; IF NEW.salary IS NULL THEN RAISE EXCEPTION '% cannot have null salary', NEW.empname; END IF; IF NEW.salary < 0 THEN RAISE EXCEPTION '% has negative salary', NEW.empname; END IF; -- Zapisz kto ustalił zarobki pracownika i kiedy NEW.last_date := current_timestamp; NEW.last_user := current_user; RETURN NEW; END; $$ LANGUAGE plpgsql ; 44
45 Dziedziczenie na poziomie tabel CREATE TABLE Cities( name text, population real, altitude int); (nie typów danych) CREATE TABLE Capitals(state char(2)) INHERITS (Cities); SELECT name, altitude FROM Cities WHERE altitude > 500; SELECT name, altitude FROM ONLY Capitals WHERE altitude > 500; ONLY może być użyte w instrukcjach SELECT, UPDATE i DELETE 45
46 Partycjonowanie przez dziedziczenie 1. Utwórz tabelę nadrzędną, z której partycje będą dziedziczyć. Ta tabela zwykle nie ma danych. 2. Utwórz tabele podrzędne do przechowywania partycji. 3. Utwórz warunki CHECK określające, jakie dane mają należeć do danej partycji w oparciu o wartości w kolumnie klucza partycji (rozłączne). 4. Utwórz indeksy na partycjach w tym ewentualnie na kolumnach klucza w każdej partycji (ewentualnie UNIQUE). 5. Napisz wyzwalacz dla tabeli nadrzędnej wstawiania danych do odpowiedniej partycji. 6. Ustaw parametr konfiguracyjny constraint_exclusion na on aby optymalizator skorzystał z warunków rozłączności. 46
47 Przykład CREATE TABLE Klienci( Id_klienta int, Nazwisko Text, Adres Text, Region Text); CREATE TABLE KliencizMazowsza( CHECK (Region = Mazowsze )) INHERITS (Klienci); CREATE INDEX Nazw_Index ON KliencizMazowsza(Nazwisko)... CREATE TRIGGER insert_klienci_trigger BEFORE INSERT ON Klienci FOR EACH ROW <funkcja wstawiająca klienta do odpowiedniej partycji> 47
48 Geometryczne typy danych 48
49 Tworzenie obiektów typu XML Zgodnie ze standardem: XMLPARSE (DOCUMENT '<?xml version="1.0"?> <book><title>manual</title><chapter>...</chapter></book>') XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>') W drugim przypadku może być więcej niż jeden element główny. Dodatkowo (tak jak dla innych typów) określenie typu: xml '<foo>bar</foo>' lub '<foo>bar</foo>'::xml Nie ma walidacji względem DTD lub XML Schema. W drugą stronę konstrukcja standardu: XMLSERIALIZE ( { DOCUMENT CONTENT } value AS type ) Dodatkowo: cast 49
50 Funkcja xmlelement SELECT xmlelement(name foo, xmlattributes('xyz' as bar), xmlelement(name abc), xmlcomment('test'), xmlelement(name xyz)); xmlelement <foo bar="xyz"><abc/><!--test--><xyz/></foo> 50
51 Wyszukiwanie w dokumencie XML xpath(xpath, xml) -- wynikiem tablica wartości XML wskazywanych przez ścieżkę xpath 51
52 Mapowanie tabel na XML tabletoxml(tablename) <tablename> <row> <columnname1>data</columnname1> <columnname2>data</columnname2> </row> <row>... </row>... </tablename> Podobnie querytoxml, cursortoxml. 52
53 Funkcje tabelowe CREATE TABLE Foo (fooid int, foosubid int, fooname text); CREATE FUNCTION getfoo(int) RETURNS SETOF Foo AS $$ SELECT * FROM Foo WHERE fooid = $1; $$ LANGUAGE SQL; SELECT * FROM getfoo(1) AS t1; SELECT * FROM Foo WHERE foosubid IN(SELECT foosubid FROM getfoo(foo.fooid) z WHERE z.fooid = Foo.fooid); CREATE VIEW vw_getfoo AS SELECT * FROM getfoo(1); SELECT * FROM vw_getfoo; 53
54 Tablice wielowymiarowe ARRAY SELECT ARRAY[1,2,3+4]; array {1,2,7} (1 row) Wielowymiarowa tablica: SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]]; array {{1,2},{3,4}} (1 row) Wewnętrzne słowa ARRAY można opuszczać. 54
55 ARRAY CREATE TABLE Arr(f1 integer[], f2 integer[]); INSERT INTO Arr VALUES (ARRAY[1,2], ARRAY[3,4]); SELECT ARRAY[f1, f2, '{5,6}'::integer[]] FROM Arr; array {{1,2},{3,4},{5,6}} (1 row) 55
56 ARRAY od podzapytania SELECT ARRAY(SELECT oid FROM Pg_proc WHERE proname LIKE 'bytea%') AS Zbior; Zbior {2011,1954,1948,1952,1951,1244,1950,2005,1949,1953,2006} (1 row) Podzapytanie musi zwracać pojedyncza kolumnę! * 56
57 Typy złożone ARRAY CREATE TABLE Sal_emp ( name text, pay_by_quarter integer[], schedule text[][] ); Nieokreślony rozmiar tablic. Ograniczone tablice nie są jeszcze obsługiwane w wersji 8.3. Użycie z konstruktorem lub bez. INSERT INTO Sal_emp VALUES ('Bill', '{10000, 10000, 10000, 10000}', '{{"meeting", "lunch"}, {"training", "presentation"}}'); -- lub INSERT INTO Sal_emp VALUES ('Bill', ARRAY[10000, 10000, 10000, 10000], ARRAY[['meeting', 'lunch'], ['training', 'presentation']]); 57
58 Dostęp do tablic SELECT name FROM Sal_emp WHERE pay_by_quarter[1] <> pay_by_quarter[2]; SELECT pay_by_quarter[3] FROM Sal_emp; SELECT schedule[1:2][1:1] FROM Sal_emp -- wycinek tablicy WHERE name = 'Bill'; schedule {{meeting},{training}} (1 row) * 58
59 Aktualizacja tablic UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}' WHERE name = 'Carol'; UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}' WHERE name = 'Carol'; * 59
60 Typy złożone (rekordowe) CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric); CREATE TABLE On_hand ( item inventory_item, count integer); INSERT INTO On_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000); -- ROW można opuścić, gdy co najmniej dwa elementy na liście CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric AS 'SELECT $1.price * $2' LANGUAGE SQL; SELECT price_extension(item, 10) FROM On_hand; 60
61 SELECT (item).name FROM On_hand WHERE (item).price > 9.99; -- wymagane ujęcie item w nawiasy! CREATE TYPE complex AS (r double precision, i double precision); CREATE TABLE Mytab(complex_col complex); INSERT INTO Mytab (complex_col) VALUES((1.1,2.2)); UPDATE Mytab SET complex_col = ROW(1.1,2.2) WHERE...; UPDATE Mytab SET complex_col.r = (complex_col).r + 1 WHERE...; INSERT INTO Mytab (complex_col.r, complex_col.i) VALUES(1.1, 2.2); 61
62 Indeksy B-drzewo, Hash oraz opracowane w Uniwersytecie w Berkley: GiST (Generalized Search Tree) i GIN (Generalized Inverted Index) W B drzewach NULLe idą na koniec. CREATE INDEX name ON table(column); -- B-drzewo CREATE INDEX name ON table USING hash(column); -- Hasz CREATE INDEX ind_nam ON People ((first_name ' ' last_name)); 62
63 Realizacja złożonej selekcji Użycie indeksów może być łączone przez optymalizator np. gdy klauzula: WHERE (A OR B) AND (C OR D) i są indeksy pozwalające wyznaczyć WHERE A, WHERE B, WHERE C, WHERE D każde wyszukiwanie produkuje wektor bitów, które następnie są razem łączony w wynik jak przy indeksach bitmapowych. Sel(R, (A OR B) AND (C OR D)) = (SEL(R,A) OR SEL(R,B)) AND (SEL(R,C) OR SEL(R,D)) 63
64 Indeksy częściowe Określone na podzbiorze zbioru wierszy określonym przez predykat indeksu. Można w ten sposób uniknąć indeksowania wartości, które często występują i dla których użycie indeksu jest niewskazane. CREATE TABLE Access_log (url varchar, client_ip inet,... ); CREATE INDEX access_log_client_ip_ix ON Access_log (client_ip) WHERE NOT (client_ip > inet ' ' AND client_ip < inet ' '); Indeks zostanie np. użyty dla: SELECT * FROM Access_log WHERE client_ip = inet ' '; CREATE INDEX orders_unbilled_index ON Orders (order_nr) WHERE billed IS NOT true; 64
65 Operator CLUSTER na tabeli grupujący rekordy tabeli (1) CLUSTER tablename USING indexname; Indeks musi być wcześniej utworzony. System sortuje plik danych zgodnie z porządkiem określonym przez indeks. Aby optymalizator wziął dokonane pogrupowanie pod uwagę trzeba wykonać instrukcję ANALYZE. Kolejne UPDATEy mogą zaburzyć porządek klastra. Dokonywać częstych powtórzeń CLUSTER np. CLUSTER; -- dokonuje reklastrowania wszystkich pogrupowanych tabel. Operacja poniższa może być szybsza niż (1): CREATE TABLE newtable AS SELECT * FROM table ORDER BY columnlist; 65
66 Transakcja BEGIN; -- początek transakcji UPDATE Accounts SET balance = balance WHERE name = 'Alice'; -- etc etc COMMIT/ROLLBACK/ROLLBACK TO savepoint; Gdy nie ma BEGIN - każda instrukcja jest osobną transakcją. 66
67 Współbieżność: model MVCS (Multiversion Concurrency Control) Przy odczycie nie ma blokad wykorzystywana jest jednolita wersja danych tak jak w Oracle. Oprócz tego są blokady zakładane explicite zarówno na poziomie wierszy jak i tabel. Są tylko dwa różne poziomy izolacji (tak jak w Oracle) o nazwach: READ COMMITTED i SERIALIZABLE. 67
68 READ COMMITTED Read Committed jest domyślny. Zapytanie korzysta ze stanu bazy danych, jaki był w chwili rozpoczynania się zapytania uwzględniający tylko zmiany zatwierdzone. Przy UPDATE, DELETE, SELECT z FOR UPDATE i SELECT z FOR SHARE wyszukiwanie wierszy odbywa się tak samo jak przy SELECT i dotyczy wierszy także gdy zostały w trakcie zmienione wyszukiwanie czeka na zakończenie transakcji, która je zmienia - (gdy uzyskane zostaną blokady do update u sprawdzane jest ponownie czy spełniają one warunek wyszukiwania). (*) SELECT Ename FROM Emp WHERE Deptno=123 FOR SHARE; - założenie blokad S na spełniające wiersze 68
69 SERIALIZABLE Zapytanie korzysta ze stanu bazy danych, jaki był w chwili rozpoczynania się transakcji uwzględniający tylko zmiany zatwierdzone. Przy UPDATE, DELETE, SELECT FOR UPDATE i SELECT FOR SHARE wyszukiwanie wierszy odbywa się tak samo jak przy SELECT i dotyczy tych wierszy także gdy zostały w trakcie zmienione wyszukiwanie czeka na zakończenie transakcji, która je zmienia. Gdy wiersz nie uległ zmianie od chwili rozpoczęcia się transakcji, transakcja zakłada blokady i wykonuje zmiany. Gdy wiersz uległ zmianie, transakcja zostaje wycofana i aplikacja musi ją ponowić. Jest gwarancja, że transakcja działa na spójnych danych nie zmienianych przez inne transakcje, ale nie zapobiega fantomom, czyli nie gwarantuje szeregowalności (wymagane jest założenie explicite odpowiednich blokad). 69
70 Rodzaje blokad na tabeli ACCESS SHARE do wykonania zwykłego SELECT; ROW SHARE (IS) do SELECT FOR UPDATE i SELECT FOR SHARE; ROW EXCLUSIVE (IX) do INSERT, DELETE, UPDATE; SHARE UPDATE EXCLUSIVE do VACUUM, ANALYZE, CREATE INDEX CONCURRENTLY; SHARE (S) do CREATE INDEX (bez CONCURRENTLY); SHARE ROW EXCLUSIVE SHARE i ROW ECLUSIVE; EXCLUSIVE (X) przy pewnych operacjach na katalogu systemowym; ACCESS EXCLUSIVE do ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL 70
71 Blokady explicite na tabelę LOCK TABLE Nazwa IN MODE; 71
72 Blokady wierszowe Tylko dwa typy: SHARE i EXCLUSIVE. Informacja o blokadzie na wierszu nie jest trzymana w RAM, tylko razem z wierszem danych na dysku (tak jak w Oracle). Blokada na wierszu nie blokuje jego odczytu tylko jego zapis. Gdy wiersz jest zmieniany blokada EXCLUSIVE. Przy SELECT FOR UPDATE jest zakładana blokada EXCLUSIVE nie ma osobnego typu blokady UPDATE. Blokada SHARE jest zakładana przy SELECT FOR SHARE. Samo SELECT nie zakłada blokady SHARE na wierszach. 72
73 Uprawnienia obiektowe SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE. GRANT UPDATE ON accounts TO joe; 73
74 Aby móc używać czyjegoś schematu użytkownik musi uzyskać uprawnienie USAGE od właściciela (podobnie, aby tworzyć obiekty, uprawnienie CREATE do schematu). Każdy użytkownik mający uprawnienie logowania się do bazy danych, ma uprawnienia CREATE i USAGE w schemacie public. Właściciel bazy danych może odwołać te domyślne uprawnienia: REVOKE CREATE ON SCHEMA public FROM PUBLIC; 74
75 Wzorce użycia schematów v v v Jeden schemat public tak jakby nie było schematów domyślnie wybierany jest public. Każdy użytkownik ma zakładany schemat identyczny ze swoją nazwą użytkownika. Wtedy system jako domyślny schemat bierze właśnie ten schemat. Można usunąć schemat public. Wiele schematów dedykowanych do obsługi specyficznych funkcji/użytkowników. 75
76 Katalog systemowy Każda baza danych zawiera schemat pg_catalog, w którym znajdują się systemowe tabele/perspektywy. Nazwy obiektów w tym schemacie zaczynają się od pg, np.pg_class katalog obiektów jak tabele, perspektywy, indeksy; pg_attribute kolumny tabel; pg_database bazy danych (jeden katalog na klaster). SELECT p.relname, c.name, c.altitude FROM Cities c, PG_class p WHERE c.altitude > 500 and c.tableoid = p.oid; Relname name altitude cities Las Vegas 2174 cities Mariposa 1953 capitals Madison
77 Tworzenie bazy danych CREATE TABLESPACE sample_ts OWNER <db_owner> LOCATION 'c:/pgdata/sampledb/system'; CREATE DATABASE sample_db OWNER <db_owner> TEMPLATE <template> TABLESPACE sample_ts; Template0 oryginalna, systemowa pusta baza danych Template1 systemowa dopasowana baza danych możliwe dodawanie obiektów i cech (domyślnie) Ewentualnie inna bd nieaktywna. 77
78 EXPLAIN EXPLAIN SELECT * FROM tenk1; QUERY PLAN Seq Scan on tenk1 (cost= rows=10000 width=244) 1. Szacowany koszt wstępny przed rozpoczęciem przekazywania wyników np. sortowanie (domyślnie l. operacji We/Wy) 2. Szacowany koszt całkowity (domyślnie l. operacji We/Wy) 3. Szacowana liczba wynikowych wierszy. 4. Szacowany oczekiwany rozmiar wiersza (w bajtach). 78
79 Statystyki używane przez optymalizator SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 'tenk1%'; Relname relkind reltuples relpages tenk1 r tenk1_hundred i tenk1_thous_tenthous i tenk1_unique1 i tenk1_unique2 i (5 rows) r tabela, i - indeks Liczba wierszy, Liczba stron 79
80 Statystyki obliczane przez ANALYZE Domyślnie ANALYZE jest realizowane przez proces drugoplanowany działający w tle. Oszacowanie selektywności wyszukiwania przez indeks założony na danej kolumnie. Dla każdej tabeli i kolumny np. Liczba różnych wartości w kolumnie Jaki procent wartości w kolumnie stanowią NULL Lista wartości, które wielokrotnie się powtarzają 80
81 Instrukcje administracyjne VACUUM odśmiecanie (garbage-collection) miejsca na dysku i opcjonalnie, przy okazji ANALYZE. REINDEX przebudowa indeksów. 81
82 Powiadamianie o zajściu zdarzenia W ramach jednej bazy danych: LISTEN nazwa_zdarzenia; (na czas aktualnej sesji) NOTIFY nazwa_zdarzenia; UNLISTEN nazwa_zdarzenia; Np. Nowy_klient_dodany_do_bazy, Klient_nie_wypłacalny. Projektant bazy danych ustala nazwy zdarzeń. Dodatkowe informacje są przekazywane poprzez tabele w indywidualny sposób. Zwykle instrukcja NOTIFY występuje w regule automatycznie odpalanej. Jeśli występuje w transakcji, akcja powiadamiania zachodzi po wykonaniu COMMIT. Powiadomienie zależy od języka aplikacji np. w C funkcja PQnotifies sprawdza, czy otrzymano powiadomienie. 82
83 Przykład ujawnienie wierszy w tabeli przez perspektywę CREATE VIEW phone_num AS SELECT name, phone FROM phone_data WHERE phone NOT LIKE '412%'; CREATE FUNCTION tricky(text, text) RETURNS bool AS $$ BEGIN RAISE NOTICE '% => %', $1, $2; RETURN true; END $$ LANGUAGE plpgsql COST ; SELECT * FROM phone_num WHERE tricky(name, phone); -- COST wskazówka dla optymalizatora - oczekiwany koszt realizacji funkcji 83
84 Przestrzeń tabel CREATE TABLESPACE space1 LOCATION '/mnt/sda1/postgresql/data'; CREATE TABLE foo(i int) TABLESPACE space1; Również baza danych może zostać utworzona w określonej przestrzeni tabel. 84
85 TOAST (The Oversized-Attribute Storage Technique). Stały rozmiar strony - 8kB Każdy wiersz tylko na jednej stronie. Gdy są kolumny dopuszczające większe rozmiary niż domyślnie 2000B, danej tabeli jest przyporządkowywana druga tabela do zapisywania dużych wartości w kolumnach. Duże obiekty są kompresowane albo składowane jako zbiór wierszy w tej dodatkowej tabeli. 85
Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
Bardziej szczegółowoWyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia
Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie
Bardziej szczegółowoPlan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,
Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających
Bardziej szczegółowoBAZA DANYCH SIECI HOTELI
Paulina Gogół s241906 BAZA DANYCH SIECI HOTELI Baza jest częścią systemu zarządzającego pewną siecią hoteli. Składa się z tabeli powiązanych ze sobą różnymi relacjami. Służy ona lepszemu zorganizowaniu
Bardziej szczegółowoProcedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu
Procedury składowane Kolejnym typem programu języka PL/SQL są procedury składowane. Procedury mogą posiadać parametry typu IN, OUT lub IN OUT. Umożliwiają wykonanie operacji na danych w bazie, mogą też
Bardziej szczegółowoOracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze
Bardziej szczegółowoDECLARE VARIABLE zmienna1 typ danych; BEGIN
Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;
Bardziej szczegółowoUPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');
polecenie UPDATE służy do aktualizacji zawartości wierszy tabel lub perspektyw składnia: UPDATE { } SET { { = DEFAULT NULL}, {
Bardziej szczegółowoHurtownia Świętego Mikołaja projekt bazy danych
Aleksandra Kobusińska nr indeksu: 218366 Hurtownia Świętego Mikołaja projekt bazy danych Zaprezentowana poniżej baza jest częścią większego projektu bazy danych wykorzystywanej w krajowych oddziałach wiosek
Bardziej szczegółowoPODSTAWY BAZ DANYCH 13. PL/SQL
PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących
Bardziej szczegółowoZaawansowane bazy danych i hurtownie danych semestr I
Podprogramy Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I Procedury do przeprowadzenia akcji Funkcje do obliczania wartości Pakiety do zbierania logicznie
Bardziej szczegółowoIndeksowanie w bazach danych
w bazach Katedra Informatyki Stosowanej AGH 5grudnia2013 Outline 1 2 3 4 Czym jest indeks? Indeks to struktura, która ma przyspieszyć wyszukiwanie. Indeks definiowany jest dla atrybutów, które nazywamy
Bardziej szczegółowoDECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];
Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server
Bardziej szczegółowoSQL 4 Structured Query Lenguage
Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...
Bardziej szczegółowoSkładowane procedury i funkcje
Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.
Bardziej szczegółowoE.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze
Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie
Bardziej szczegółowoJęzyk SQL, zajęcia nr 1
Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze
Bardziej szczegółowoProcedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1
Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1 Procedury wyzwalane
Bardziej szczegółowoWykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze
Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze 1 Funkcje i procedury pamiętane Następujące polecenie tworzy zestawienie zawierające informację o tym ilu jest na naszej hipotetycznej
Bardziej szczegółowow PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w
Bardziej szczegółowoUżywany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.
Plan wykładu Spis treści 1 Dynamiczny SQL 1 2 Wyzwalacze 2 3 Podsumowanie 9 4 Źródła 9 1 Dynamiczny SQL Dynamiczny SQL Dynamiczny SQL - technika programowania umożliwiająca generowanie instrukcji SQL dynamicznie
Bardziej szczegółowoWprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.
Bazy Danych i Systemy informacyjne Wykład 2 Piotr Syga 16.10.2017 Dodawanie, usuwanie i zmienianie rekordów Wstawianie rekordu wstawianie do tabeli INSERT INTO A VALUES ( fioletowy, okrągły, słodko-kwaśny
Bardziej szczegółowoKOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów
KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów SQL3 wprowadza następujące kolekcje: zbiory ( SETS ) - zestaw elementów bez powtórzeń, kolejność nieistotna listy ( LISTS ) - zestaw
Bardziej szczegółowoBloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
Bardziej szczegółowoDDL. Data Definition Language Definiowanie obiektów pomocniczych: domeny, sekwencje, ograniczenia, widoki
DDL Data Definition Language 1 Bazy Danych Wykład p.t. DDL Data Definition Language Definiowanie obiektów pomocniczych: domeny, sekwencje, ograniczenia, widoki Antoni Ligęza ligeza@agh.edu.pl http://galaxy.uci.agh.edu.pl/~ligeza
Bardziej szczegółowoWykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach
Indeksy dodatkowe struktury służące przyśpieszeniu dostępu do danych o użyciu indeksu podczas realizacji poleceń decyduje SZBD niektóre systemy bazodanowe automatycznie tworzą indeksy dla kolumn o wartościach
Bardziej szczegółowoBlaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik
Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Technologia Przykłady praktycznych zastosowań wyzwalaczy będą omawiane na bazie systemu MS SQL Server 2005 Wprowadzenie
Bardziej szczegółowoBazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)
Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty PL/SQL, c.d. 1 / 37 SQL to za mało SQL brakuje możliwości dostępnych w językach proceduralnych.
Bardziej szczegółowoSQL :: Data Definition Language
SQL :: Data Definition Language 1. Zaproponuj wydajną strukturę danych tabela) do przechowywania macierzy o dowolnych wymiarach w bazie danych. Propozycja struktury powinna zostać zapisana z wykorzystaniem
Bardziej szczegółowo1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi
1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) Tworząc tabelę nie możemy określić, do którego pliku trafi, lecz możemy określić do której grupy plików trafi Zawsze istnieje grupa zawierająca
Bardziej szczegółowoInstrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.
Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN
Bardziej szczegółowoBazy danych 6. Klucze obce. P. F. Góra
Bazy danych 6. Klucze obce P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2018 Dygresja: Metody przechowywania tabel w MySQL Tabele w MySQL moga być przechowywane na kilka sposobów. Sposób ten (żargonowo:
Bardziej szczegółowoKolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle
Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang.
Bardziej szczegółowoPakiety podprogramów Dynamiczny SQL
Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL 1 Pakiety Pakiet (ang. package)
Bardziej szczegółowoPlan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99
Plan ćwiczenia Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych Użytkownicy i schematy bazy danych. Uwierzytelnianie i autoryzacja. Przywileje systemowe i obiektowe. Role. Synonimy. Uprawnienia,
Bardziej szczegółowoAspekty aktywne baz danych
Aspekty aktywne baz danych Aktywne aspekty baz danych Baza danych powinna zapewniać pewne własności i niezmienniki; Własności te powinny mogą być zapisane do bazy danych, a baza danych powinna zapewniać
Bardziej szczegółowoPL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń
PL/SQL Zaawansowane tematy PL/SQL Piotr Medoń Cele Omówienie transakcji bazodanowych Omówienie obsługi wyjątków Zarządzanie perspektywami Tworzenie i usuwanie sekwencji Budowa wyzwalaczy 2 Transakcje bazodanowe
Bardziej szczegółowoWyzwalacze. Anna Fiedorowicz Bazy danych 2
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
Bardziej szczegółowoPodstawy języka SQL. SQL Structured Query Languagestrukturalny
Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych
Bardziej szczegółowo15. Funkcje i procedury składowane PL/SQL
15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp
Bardziej szczegółowoPakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.
Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą
Bardziej szczegółowoSystemowe aspekty baz
Systemowe aspekty baz danych Deklaracja zmiennej Zmienne mogą być wejściowe i wyjściowe Zmienne w T-SQL można deklarować za pomocą @: declare @nazwisko varchar(20) Zapytanie z użyciem zmiennej: select
Bardziej szczegółowoPL/SQL. Zaawansowane tematy PL/SQL
PL/SQL Zaawansowane tematy PL/SQL Cele Poznanie złożonych i referencyjnych typów danych Poznanie konstrukcji kursora Poznanie kodu składowanego Poznanie procedur i funkcji 2 Złożone typy danych RECORD
Bardziej szczegółowoWykład 8. SQL praca z tabelami 5
Wykład 8 SQL praca z tabelami 5 Podzapytania to mechanizm pozwalający wykorzystywać wyniki jednego zapytania w innym zapytaniu. Nazywane często zapytaniami zagnieżdżonymi. Są stosowane z zapytaniami typu
Bardziej szczegółowoOdnawialne Źródła Energii I rok. Tutorial PostgreSQL
Tutorial PostgreSQL 1. Instalacja na własnym komputerze: a. Zainstaluj program ze strony: https://www.postgresql.org/download/ Wersja odpowiednia dla systemu operacyjnego Linux, Mac, Windows Przy pierwszym
Bardziej szczegółowoOracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -
Bardziej szczegółowoCele. Definiowanie wyzwalaczy
WYZWALACZE Definiowanie wyzwalaczy Cele Wyjaśnić cel istnienia wyzwalaczy Przedyskutować zalety wyzwalaczy Wymienić i opisać cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere Opisać dwa
Bardziej szczegółowoUprawnienia, role, synonimy
Uprawnienia, role, synonimy Schemat, użytkownicy, autoryzacja użytkowników, uprawnienia systemowe i obiektowe, nadawanie i odbieranie uprawnień, tworzenie ról, przywileje, synonimy Schematy i użytkownicy
Bardziej szczegółowo77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.
77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. Przy modelowaniu bazy danych możemy wyróżnić następujące typy połączeń relacyjnych: jeden do wielu, jeden do jednego, wiele
Bardziej szczegółowo1. Wyzwalacze BD (ang. triggers)
1. Wyzwalacze BD (ang. triggers) Wyzwalacz bazy danych jest procedurą składowaną w bazie powiązaną z jedną konkretną tablicą. Z pojedynczą tablicą może być związane wiele wyzwalaczy, natomiast pojedynczy
Bardziej szczegółowoAutor: Joanna Karwowska
Autor: Joanna Karwowska Klucz podstawowy PRIMARY KEY Klucz kandydujący UNIQUE Klucz alternatywny - klucze kandydujące, które nie zostały wybrane na klucz podstawowy Klucz obcy - REFERENCES Tworząc tabelę,
Bardziej szczegółowoW PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.
PROCEDURY W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc. \df Aby wyświetlić wszystkie funkcje z argumentami
Bardziej szczegółowoFunkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u
Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u będziemy używać w taki sam sposób, jak wbudowanych funkcji
Bardziej szczegółowoPaweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/
Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Historia i standardy Podstawy relacyjności Typy danych DDL tabele, widoki, sekwencje zmiana struktury DML DQL Podstawy, złączenia,
Bardziej szczegółowoBazy danych 9. SQL Klucze obce Transakcje
Bazy danych 9. SQL Klucze obce Transakcje P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Klucze obce Klucze obce powiazanie indeksowanej kolumny jakiejś tabeli z indeksowana kolumna
Bardziej szczegółowoCheatsheet PL/SQL Andrzej Klusiewicz 1/9
Declare y integer; z varchar2(50); d date; null; Declare x integer:=10; null; x integer; x:=10; dbms_output.put_line('hello world'); for x in 1..10 loop Deklaracja 4 zmiennych. Jednej typu rzeczywistego,
Bardziej szczegółowoD D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?
D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się
Bardziej szczegółowoPodstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści
Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, 2016 Spis treści Wprowadzenie Podziękowania xiii xvii 1 Podstawy zapytań i programowania T-SQL 1 Podstawy
Bardziej szczegółowoTworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];
Widoki/Perspektywy Podstawy Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Usuwanie widoku DROP VIEW [nazwa_widoku]; Przykład 1 Przykład najprostszego
Bardziej szczegółowoBazy danych 7. SQL podstawy
Bazy danych 7. SQL podstawy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Structured Query Language Używane standardy: SQL92 SQL99 SQL:2003 Żaden dostawca nie jest w pełni zgodny
Bardziej szczegółowoSystemowe aspekty baz danych
Systemowe aspekty baz danych Deklaracja zmiennej Zmienne mogą być wejściowe i wyjściowe Zmienne w T-SQL można deklarować za pomocą @: declare @nazwisko varchar(20) Zapytanie z użyciem zmiennej: select
Bardziej szczegółowoWykład 2. SQL 1 Structured Query Lenguage
Wykład 2 SQL 1 Structured Query Lenguage SQL (Structured Query Language) Język zapytań do bazy danych. IBM lata osiemdziesiąte. Stosowany w systemach zarządzania bazami danych (DBMS); Oracle, Paradox,Access,
Bardziej szczegółowoPrzestrzenne bazy danych Podstawy języka SQL
Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1 SQL Język SQL (ang.structured
Bardziej szczegółowoPawel@Kasprowski.pl Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl
Bazy danych Zapytania SELECT Dr inż. Paweł Kasprowski pawel@kasprowski.pl Przykład HAVING Podaj liczebność zespołów dla których najstarszy pracownik urodził się po 1940 select idz, count(*) from prac p
Bardziej szczegółowoMicrosoft SQL Server Podstawy T-SQL
Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania
Bardziej szczegółowoTabele wykorzystywane w przykładach
Tabele wykorzystywane w przykładach create table departamenty( dep_id serial primary key, nazwa_departamentu text ); Tabele używane w wybranych przkładach create table pracownicy ( emp_id serial primary
Bardziej szczegółowoJęzyk PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL
Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.
Bardziej szczegółowoUstawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).
POZIOMY IZOLACJI TRANSAKCJI 1. Microsoft SQL Server 2012 (od SQL Server 2005) W systemie SQL Server można wybrać sposób sterowania współbieżnością. Podstawowy sposób to stosowanie blokad. Wykorzystywane
Bardziej szczegółowoJęzyk SQL. Rozdział 9. Język definiowania danych DDL, część 2.
Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. Ograniczenia integralnościowe, modyfikowanie struktury relacji, zarządzanie ograniczeniami. 1 Ograniczenia integralnościowe Służą do weryfikacji
Bardziej szczegółowoLAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,
Informatyka sem. III studia inżynierskie Transport 2018/19 Lab 6 LAB 6 TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL, UPDATE, INSERT INTO, ALTER TABLE, CREATE VIEW, CREATE TRIGGER, FUNCTION,
Bardziej szczegółowoMonika Sychla 241858 Daniel Smolarek 241875. Projekt bazy danych
Monika Sychla 241858 Daniel Smolarek 241875 Projekt bazy danych Naszym zadaniem było zaprojektowanie przykładowej bazy danych, w oparciu o zagadnienia jakie zostały wprowadzone w trakcie kursu z baz danych.
Bardziej szczegółowoProgramowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika
Programowanie w SQL procedury i funkcje UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika 1. Funkcje o wartościach skalarnych ang. scalar valued
Bardziej szczegółowoInstrukcje DML INSERT, UPDATE, DELETE. COPY
Wprowadzenie do DML i DDL 1 Bazy Danych Wykład p.t. Instrukcje DML INSERT, UPDATE, DELETE. COPY Antoni Ligęza ligeza@agh.edu.pl http://galaxy.uci.agh.edu.pl/~ligeza Wykorzystano materiały: http: //www.postgresql.org/docs/8.3/interactive/index.html
Bardziej szczegółowoSQL - DDL. 1 Tabele systemowe. 2 Typy danych
SQL - DDL DDL (ang. data definition language) jest częścią języka zapytań SQL obejmująca tworzenie i zarządzanie (modyfikację, usuwanie i przydzielanie uprawnień) obiektami w bazie danych (tabelami, perspektywami,
Bardziej szczegółowoĆwiczenia 2 IBM DB2 Data Studio
Ćwiczenia 2 IBM DB2 Data Studio Temat: Aplikacje w Data Studio 1. Projekty Tworzenie procedur, UDF, trygerów zaczynamy od utworzenia projektu File -> New -> Project wybieramy Data Development Project.
Bardziej szczegółowoPlan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20
Plan wykładu BAZY DANYCH II WYKŁAD 9 Dynamiczny SQL, NDS, EXECUTE IMMEDIATE, Pakiet DBMS_SQL, Obiekty w PL/SQL, Tworzenie, wywoływanie, dziedziczenie, etc. dr inż. Agnieszka Bołtuć Dynamiczny SQL Pozwala
Bardziej szczegółowoWykład 5. SQL praca z tabelami 2
Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,
Bardziej szczegółowoI. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE
Wykład 9 Implementacja języka SQL w systemach baz danych Oracle manipulowanie danymi (DML), tworzenie, modyfikowanie i usuwanie obiektów bazy danych: tabel i perspektyw, więzów integralności, komentarzy
Bardziej szczegółowoPawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl
Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność
Bardziej szczegółowoPrzykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;
Temat: Funkcje, procedury i wyzwalacze. Oprócz tabel i widoków w bazach danych możemy tworzyć własne funkcje, procedury i specjalny typ procedur, które będą automatycznie wywoływanie przez MySQL w memencie
Bardziej szczegółowoProcedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML
Procedury wyzwalane Rozdział 13 Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie
Bardziej szczegółowoSQL język zapytań (query language) cz.1
SQL język zapytań (query language) cz.1 Zapytanie SELECT - podstawy (3) SELECT A 1,A 2,...,A k (1) FROM R 1,R 2,,R n -- lista wyboru (atrybutów) -- relacje (lista FROM) (2) WHERE F -- warunek wyboru (selekcji)
Bardziej szczegółowoKomunikacja z bazą danych psql
PostgreSQL jest systemem zarządzania relacyjnymi bazami danych rozprowadzanym na zasadach open source. Twórcą i właścicielem praw autorskich jest Uniwersytet Berkeley w Stanach Zjednoczonych. Ze wszystkich
Bardziej szczegółowoMateriały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne
Materiały dostępne są na stronie: Materiały Technologie baz danych aragorn.pb.bialystok.pl/~gkret Wykład 5: Kursory jawne. Podprogramy. Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka
Bardziej szczegółowoProcedury i funkcje składowane
Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe
Bardziej szczegółowo3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota
Laboratorium nr 3 1 Bazy Danych Instrukcja laboratoryjna Temat: Wprowadzenie do języka SQL, tworzenie, modyfikacja, wypełnianie tabel 3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota 1)
Bardziej szczegółowoJęzyk PL/SQL. Rozdział 6. Procedury wyzwalane
Język PL/SQL. Rozdział 6. Procedury wyzwalane Procedury wyzwalane, cele stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie
Bardziej szczegółowoOracle11g: Wprowadzenie do SQL
Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom
Bardziej szczegółowoAdministracja i programowanie pod Microsoft SQL Server 2000
Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wyzwalacze Wprowadzenie Tworzenie wyzwalacza Wyzwalacze typu,,po'' Wyzwalacze typu,,zamiast''
Bardziej szczegółowoBazy danych 2. Wykład 5 Structured Query Language (SQL) c.d. DDL
Bazy danych 2 Wykład 5 Structured Query Language (SQL) c.d. DDL Dziedzina (DOMAIN) Dziedzina to zdefiniowany przez uŝytkownika zbiór dopuszczalnych wartości definiowany niezaleŝnie od definicji tabel Składnia
Bardziej szczegółowoPlan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL
Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Zmienne i stałe Instrukcje sterujące Wykorzystanie SQL w PL/SQL Kursory Wyjątki Projekt fizyczny bazy danych Braki projektu
Bardziej szczegółowoSQL (ang. Structured Query Language)
SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze
Bardziej szczegółowoSprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):
Utwórz bazę danych Cw: CREATE DATABASE Cw Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): DBCC USEROPTIONS Przykład z zapisem do tabeli tymczasowej: --Jeśli istnieje tabela tymczasowa
Bardziej szczegółowoWprowadzenie do projektowania i wykorzystania baz danych Relacje
Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR
Bardziej szczegółowoInternetowe bazy danych
Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 3 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl Typy tabel MySQL domyślny MyISAM inne możliwe:
Bardziej szczegółowoW SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).
Procedury składowane c.d. Parametry tablicowe w Transact-SQL. W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP). Zadanie 1. Proszę napisad procedurę składowaną, która
Bardziej szczegółowostrukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych
SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych
Bardziej szczegółowoOracle PL/SQL. Paweł Rajba.
Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Wprowadzenie Tworzenie i wykonywanie procedur i funkcji Instrukcja RETURN Parametry procedur i funkcji oraz ich przesyłanie Metadane
Bardziej szczegółowoRelacyjne bazy danych. Podstawy SQL
Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.
Bardziej szczegółowo