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 dostępnych darmowych systemów bazodanowych PostgreSQL jest najwszechstronniejszy i najbardziej skalowalny. Jest to system typu klient-serwer. Proces serwera zarządza bazą danych, akceptuje połączenia z klientami, realizuje polecenia przekazane przez klienta. Proces klienta komunikuje się z procesem serwera. Klient i serwer mogą być na tym samym lub na różnych komputerach Komunikacja z bazą danych psql Jest to tekstowy terminal do Postgres'a. Umożliwia on m. in. wprowadzanie interaktywnie zapytań oraz oglądanie ich wyników alternatywnie dane wejściowe mogą być zapisane w odpowiednim pliku i skierowane do przetwarzania przez program psql oprócz normalnych zapytań SQL, psql przetwarza wiele pomocnych meta-poleceń (zaczynających się od znaku backslash: \) umożliwia wykonywanie poleceń powłoki. Technicznie rzecz biorąc psql jest normalną aplikacją kliencką do sytemu PostgreSQL, który sam z kolei pracuje jako serwer. Aby się połączyć z bazą danych musi ona oczywiście istnieć i musimy znać jej nazwę. Musimy również znać numer portu TCP, na którym nasłuchuje serwer PostgreSQL. 7 listopada 2011 Strona 1
Połączenie z bazą danych psql [opcje] baza [użytkownik] baza nazwa bazy użytkownika użytkownik nazwa użytkownika (domyślnie login użytkownika korzystającego z konta unixowego) opcje dodatkowe opcje programu -p PORT numer portu -d BAZA nazwa bazy danych -f PLIK - pobieranie danych z pliku -h HOST nazwa zdalnego komputera -l - lista dostępnych baz danych -o PLIK - przekierowanie rezultatów do pliku -U USER - nazwa użytkownika Serwer dostępny jest na serwerze Fourier pod standardowym portem 5432. Można się na niego dostać z Fatcat'a i z Fourier'a. Z Fatcat'a psql -h fourier -U user baza Z Fouriera 1. Na początek logowanie do serwera Fourier, gdy jesteśmy na serwerze Fatcat ssh user@fourier 2. Logowanie do bazy psql -U user baza 7 listopada 2011 Strona 2
psql podstawowe metapolecenia \?- informacja o metapoleceniach \a- przełączanie między wydrukiem wyrównanym i niewyrównanym \cd zmiana katalogu \d wyświetlenie informacji o obiekcie \dt wyświetlenie listy tabel \echo wyświetlenie tekstu \qecho j.w. stosowane przy przekierowywaniu \f ustawienie separatora dla niewyrównanego wydruku \h pomoc na temat poleceń SQL-a \H włączanie formatu HTML wydruków \i wczytanie kwerend z pliku \o zapisywanie rezultatów zapytań do pliku \q wyjście z programu \s wyświetlenie (lub zapis do pliku) historii poleceń psql-a \set przypisywanie wartości zmiennym (dostęp poprzez :NAZWA) \unset kasuje ustawienie \set. \t włącza tryb wyświetlania wyłącznie danych \timing włącza wyświetlanie czasu wykonania kwerend \!- wykonanie polecenia powłoki 7 listopada 2011 Strona 3
DDL - Data Definition Language - można operować na strukturach, w których dane są przechowywane czyli np. dodawać, zmieniać i kasować tabele lub bazy (CREATE, DRO, ALTER) DML -Data Manipulation Language- służy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany (SELECT, INSERT, UPDATE, DELETE) Tworzenie tabeli CREATE TABLE test (Imie VARCHAR(32) DEFAULT Jan, Numer INT not null, Pensja INT check (pensja >100), Test_id INT PRIMARY KEY, Kod INT UNIQUE); Usuwanie tabeli DROPE TABLE test ; Wypełnianie tabeli INSERT INTO test VALUES ('Tomasz',12,123,40,55); Sprawdzenie działania ograniczeń INSERT INTO test VALUES ('Tomasz',12,123,44,54); 7 listopada 2011 Strona 4
INSERT INTO test VALUES ('Tomasz',12,10,4,5); INSERT INTO test (Pensja, Test_id, Kod) VALUES (1000,24,25); Ograniczenia na poziomie tabeli CREATE TABLE test_1 (Numer INT,Pensja INT,Test_id INT PRIMARY KEY, CONSTRAINT t1 CHECK (Numer < Pensja)); INSERT INTO test (Numer, Pensja,Test_id,Kod) VALUES (12,1000,14,15); 7 listopada 2011 Strona 5
Zmiana struktury tabeli ALTER TABLE test ADD COLUMN Nazwisko VARCHAR(32); ALTER TABLE test RENAME COLUMN Nazwisko TO Nazwa; ALTER TABLE test_1 RENAME TO test_2; Zmiana zawartości tabeli UPDATE test SET pensja = 200; 7 listopada 2011 Strona 6
UPDATE test SET pensja = 134 WHERE Imie= 'Tomasz'; DELETE FROM test WHERE Imie= 'Tomasz'; Wczytanie i wykonanie poleceń zapisanych na pliku Plik create_tables.sql zawiera polecenia SQL tworzące tabele bazy danych przestawionej na schemacie poniżej. Wczytujemy je za pomocą metapolecenia \i i9student=>\i create_tables.sql Ćwiczenie 1. Proszę wyświetlić wszystkie informacje o tabeli item Ćwiczenie2. Wykorzystując pliki pop_*.sql wypełnić wszystkie tabele danymi. Lista miast i nazwiska wszystkich klientów, nazwa kolumny lname zmieniona na nazwisko, posortowane najpierw rosnąco według miasta, a w obrębie jednego miasta nazwiska posortowane malejąco. SELECT town, lname AS nazwisko FROM customer ORDER BY town, lname DESC; Lista wszystkich miast bez duplikatów. SELECT DISTINCT town FROM customer; Cena wszystkich towarów z tablicy item w groszach, wypisana w formacie integer SELECT description, CAST(cost_price*100 AS INT)AS cena FROM item; 7 listopada 2011 Strona 7
Wypisać nazwiska klientów, którzy nie są mężczyznami i mieszkają w Bingham lub w Nicetown. SELECT title, fname, lname, town FROM customer WHERE title<> Mr AND (town= Bingham OR town = Nicetown ); SELECT title, fname, lname, town FROM customer WHERE title<> Mr AND town IN ( Bingham, Nicetown ); Wypisać wszystkich, których druga litera imienia to a SELECT fname, lname FROM customer WHERE fname LIKE _a% ; Uwaga! Jeżeli w przeszukiwanych danych może występować znak specjalny (% lub _ ), należy użyć znaku zdejmującego znaczenie specjalne (escape character) zdefiniowanego za pomocą klauzuli ESCAPE LIKE 15#% ESCAPE # Wypisywanie ograniczonej ilości wierszy 5 pierwszych wierszy wyniku SELECT customer_id, town FROM customer LIMIT 5; Zadania Proszę przygotować skrypt tworzący tabelę opisującą pracownika, oraz wypełnić ją danymi zgodnie ze wzorem. Tabela emp powinna składać się z następujących pól: empno numer pracownika - numeric (4,0) klucz główny; ename nazwisko pracownika - varchar(10); job stanowisko - varchar(10); comm prowizja - numeric (7,2); 7 listopada 2011 Strona 8
mgr menadżer - varchar(10); sal wynagrodzenie miesięczne - numeric (7,2); deptno numer departamentu int. Wykonując kolejne polecenia, proszę kwerendy zapisywać do pliku 1. Wyświetlić numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli emp. 2. Wyliczyć roczną pensję podstawową dla każdego pracownika, jeżeli każdy dostanie podwyżkę o 250 3. Wyświetlić wszystkie różne numery departamentów z tabeli emp. 4. Wyświetlić wszystkie dane o pracownikach pracujących na stanowisku CLERK. 5. Wyświetlić dane pracowników, których prowizja przekracza pensję. 6. Wyświetlić dane pracowników, których pensja mieści się pomiędzy 1000 a 2000. 7. Wyświetlić dane pracowników o nazwiskach na literę 'S'. 8. Wyświetlić dane pracowników, których nazwiska są czteroliterowe. 9. Wyświetlić dane pracowników, którzy nie posiadają szefa. 10. Wyświetlić dane pracowników, których nazwiska nie zaczynają się od litery M. 7 listopada 2011 Strona 9