W czasie zajęć w laboratorium będziemy używać publicznie dostępnego DBMS Postgres.
Należy zalogować się do Linuxa na jakąś maszynę w laboratorium.
Chcąc pracować interakcyjnie logujemy się do Postgresa pisząc:
psql -h nasz-serwer nasza-baza nasz-login
psql to program do doraźnego dostępu i administrowania bazami danych w Postgresie używający SQL. nasz-login oznacza login w systemie Linux.
Zostaniemy poproszeni o hasło. Początkowym hasłem jest ,,x'' i musi być zmienione jak najszybciej. Proszę nie używać swoich haseł z Linuxa, ponieważ w pewnych okolicznościach mogą być one widoczne (wprawdzie tylko dla administratorów, ale zawsze to już coś). Po wprowadzeniu poprawnego hasła powinniśmy zobaczyć prompt
bd=>
W odpowiedzi na prompt wpisujemy
ALTER USER nasz-login WITH PASSWORD 'nowe-hasło';
Każde polecenie SQL należy kończyć średnikiem.
Przypominam, że SQL nie rozróżnia (poza napisami) dużych i małych liter. Konwencjonalnie będę używał dużych liter do wyróżniania słów kluczowych SQL.
Oprócz instrukcji SQL możemy wpisywać polecenia psql. Polecenia
psql rozpoczynają się lewym ukośnikiem (backslashem).
Polecenie \q
służy do kończenia pracy.
Inne przydatne polecenia dają dostęp do interakcyjnej pomocy.
\h
z nazwą instrukcji SQL (np. \h select
lub \h create table
) podaje krótki opis składni.
Aby dostać listę poleceń psql, nalezy napisać
\?
.
Podczas pracy działa ,,historia'' -- poprzednie polecenia można przywoływać strzałkami pionowymi i edytować.
W psql mozna wykonywać dowolne instrukcje SQL. Można załozyć tabelę używając instrukcji
CREATE TABLE nazwa-tabeli ( lista-atrybutów-i-ich-typów );
Tekst instrukcji można wprowadzać w jednej lub kilku liniach (prompt w kolejnych zmieni się wtedy na bd), dopóki nie wpiszemy średnika kończącego instrukcję.
Przykład tworzenia tabeli:
CREATE TABLE Zwierz ( waga int, imie char(10) );
Każda tabela powinna mieć zadeklarowany klucz pierwotny:
CREATE TABLE nazwa-tabeli ( ..., id typ PRIMARY KEY, ... );
Klucz może składać się z kilku kolumn:
CREATE TABLE nazwa-tabeli ( atrybuty i ich typy, PRIMARY KEY (a,b,c) );
Po utworzeniu tabeli można wstawiać do niej wiersze. Najprościej robi się to instrukcją INSERT:
INSERT INTO nazwa-tabeli VALUES(wartość, ...);
Kolejność wartości powinna odpowiadać kolejności kolumn w deklaracji tabeli, np. aby wstawić wiersz (10, 'Kropka') do tabeli Zwierz piszemy
INSERT INTO Zwierz VALUES(10, 'Kropka');
Wiersze tabeli można obejrzeć instrukcją:
SELECT * FROM nazwa-tabeli;
Program psql wyświetla wyszukane wiersze w postaci tabelki:
SELECT * FROM test; waga | imie -------+------------ 10 | Kropka (1 row)
Tabelę usuwamy instrukcją
DROP TABLE nazwa-tabeli;
Czasami trzeba użyć modyfikatora CASCADE
DROP TABLE test CASCADE;
Jeżeli chcemy zmienić definicję tabeli, przed wczytaniem zmienionej definicji nalezy usunąć tabelę.
Informacje o utworzonych tabelach są trzymane w słownikowych tabelach
systemowych, przede wszystkim w tabeli pg_tables
. Można
wyszukać nazwy wszystkich swoich tabel podając zapytanie:
SELECT tablename FROM pg_tables WHERE tableowner = nasz-login;
Listę kolumn tabeli można też obejrzeć używając polecenia psql:
\
d nazwa-tabeli
Zamiast wpisywać instrukcje SQL interakcyjnie można umieścić je w pliku i następnie załadować ten plik poleceniem
\
i nazwa-pliku
na przykład
bd=> \
i foo.sql
PostgreSQL pozwala wczytywać i wypisywać dane z tabeli używając plików separowanych. Służy do tego instrukcja COPY:
COPY tabela TO 'plik';
Domyślnym separatorem jest znak tabulacji, ale można to zmienić:
COPY tabela FROM 'plik' USING DELIMITERS '|';
Ponieważ jednak w instrukcji COPY plik musi znajdować się w katalogu dostępnym dla procesów serwera bazy danych, zwykły użytkownik na ogół nie będzie mógł z niego skorzystać. Zamiast nazwy pliku można jednak podać stdin lub stdout, co spowoduje czytanie ze standardowego wejścia i pisanie na standardowe wyjście (w środowisku użytkownika)
COPY tabela TO stdout; COPY tabela FROM stdin USING DELIMITERS '|';
Można wtedy przekierować wejście lub wyjście programu takiego jak psql.