.iso
za namestitev operacijskega sistema Linux Ubuntu Server.ubuntu
in dogovorjeno geslo.ubuntu
.ubuntu
je član skupine sudoers
in lahko preko ukaza sudo
izvaja operacije s pravicami administratorja.bash
.bash
pwd
- v kateri mapi se nahajamols
- izpis vsebine mape (ls -l
, ls -lt
)cd
- spremeni mapo (cd podmapa
, cd ..
, cd /home/ubuntu
, cd
, …)cp
- kopiranje (cp datoteka1 datoteka2
, cp -r pot/do/mape pot/do/cilja
)mv
- premikanje oz. preimenovanje (mv datoteka1 datoteka2
, mv mapa1 pot/do/mape2
)rm
- briši (rm datoteka
, rm -r mapa
)nano
- preprost tekstovni urejevalnik (nano pot/do/datoteke.txt
)sudo
- izvajanje ukazov z administratorskimi pravicamiapt
.
sudo apt update
sudo apt install postgresql postgresql-contrib
postgres
, ki je tudi administrator na bazi.postgres
:
sudo -i -u postgres
psql
psql
. Priklop na bazo kot uporabnik postgres
.
psql
man psql
).
psql -h baza.fmf.uni-lj.si -U student banka
\q
- izhod\h
- pomoč glede ukazov v SQL\conninfo
- parametri priklopa na bazo\du
- pregled vlog na bazi\d
- pregled tabel\?
- pomoč z izpisom vsah ukazov v psql
postgres
zaženemo klienta psql
.CREATE USER uporabnisko_ime
WITH ENCRYPTED PASSWORD '********';
ROLE
.CREATE ROLE ime_vloge WITH LOGIN;
WITH LOGIN
) ali kot skupino.CREATE ROLE ime_vloge;
DROP ROLE ime_vloge;
DROP ROLE IF EXISTS ime_vloge;
CREATE ROLE demo_role WITH LOGIN;
ALTER ROLE ime_vloge WITH NOLOGIN;
postgres
)
CREATE DATABASE ime_baze;
CREATE DATABASE nova;
\c nova
\conninfo
CREATE TABLE oseba (emso TEXT PRIMARY KEY,
ime TEXT, priimek TEXT);
INSERT INTO oseba (emso, ime, priimek)
VALUES ('1234', 'Janez', 'Novak');
GRANT tip_pravice ON tabela TO ime_vloge;
GRANT UPDATE ON tabela TO uporabnik;
GRANT ALL ON tabela TO uporabnik;
REVOKE tip_pravice ON tabela FROM ime_vloge;
REVOKE INSERT ON tabela FROM PUBLIC;
psql
ali kakim drugim klientom (npr. pgAdmin 4) se lahko priklopimo na točno določeno bazo.public
, v kateri so nove tabele.ime_sheme.ime_tabele
.janez
.
CREATE USER janez WITH ENCRYPTED PASSWORD 'pomlad';
\du
psql -h localhost -U janez nova
SELECT * FROM oseba;
postgres
.
psql nova
REVOKE ALL ON DATABASE nova FROM PUBLIC;
GRANT CONNECT ON DATABASE nova TO janez;
GRANT USAGE ON SCHEMA public TO janez;
GRANT ALL ON ALL TABLES IN SCHEMA public TO janez;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO janez;
\l
\dn+
\dp
CREATE ROLE skupina;
GRANT skupina TO uporabnik1;
GRANT skupina TO uporabnik2;
SET ROLE skupina;
RESET ROLE;
ALTER ROLE uporabnik INHERIT;
INHERIT
, mu ni treba vsakič “skakati” v vloge s pomočjo SET ROLE
, ampak se pravice iz vseh vlog, katerih član je, avtomatično upoštevajo.postgres
.
psql nova
CREATE ROLE novaadmini;
REVOKE ALL ON DATABASE nova FROM PUBLIC;
GRANT CONNECT ON DATABASE nova TO novaadmini;
GRANT USAGE ON SCHEMA public TO novaadmini;
GRANT ALL ON ALL TABLES IN SCHEMA public
TO novaadmini;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public
TO novaadmini;
\l
\dn+
\dp
CREATE USER metka WITH ENCRYPTED PASSWORD 'pomlad';
ALTER ROLE metka NOINHERIT;
GRANT novaadmini TO metka;
\du
ALTER DEFAULT PRIVILEGES
FOR ROLE metka IN SCHEMA public
GRANT ALL ON TABLES TO novaadmini;
ALTER DEFAULT PRIVILEGES
FOR ROLE metka IN SCHEMA public
GRANT ALL ON SEQUENCES TO novaadmini;
psql
(ukazna vrstica).psql
je velikokrat nepriročno.postgresql.conf
.psql -U postgres -c 'SHOW config_file'
nano
popravimo ustrezno vrstico na:
listen_addresses = '*'
nano /etc/postgresql/14/main/postgresql.conf
pg_hba.conf
najdemo z ukazom
psql -U postgres -c 'SHOW hba_file'
nano
popravimo vrstico oblike
host all all 127.0.0.1/32 scram-sha-256
v vrstico
host all all 0.0.0.0/0 scram-sha-256
nano /etc/postgresql/14/main/pg_hba.conf
ubuntu
):
service postgresql restart
restart
lahko uporabimo parametra stop
oz. start
).psql
.psql
oblike \ukaz
imamo grafične preglede in ukaze preko menijev.Bridged Adapter
, t.j., na isti mreži, kot je naš računalnik.host
), uporabnika (user
), njegovo geslo in ime podatkovne baze, na katero se priklapljamo.ip address
postgres
(t.j., administratorju) oddaljen priklop, mu moramo nastaviti geslo (dvakrat vnesemo novo geslo):
psql
\password
CREATE TABLE tabela (
id INTEGER,
vsebina TEXT
);
id
ustvarimo indeks.
CREATE INDEX index1 ON tabela (id);
\di
DROP INDEX index1;
CREATE INDEX ime_indeksa ON tabela USING hash (stolpec);
CREATE INDEX ime_indeksa
ON tabela (stolpec1, stolpec2);
CREATE INDEX users_lower_email ON users(lower(email));
WHERE lower(email) = ??
BEGIN
ali BEGIN TRANSACTION
- začetek transakcijeCOMMIT
ali END TRANSACTION
- konec transakcije, shrani spremembeROLLBACK
- razveljavi spremembe\c nova
CREATE TABLE blagajna
(ime TEXT, znesek NUMERIC(10,2));
INSERT INTO blagajna (ime, znesek)
VALUES ('Janez', 10), ('Metka', 10);
BEGIN;
UPDATE blagajna SET znesek = znesek - 5
WHERE ime = 'Janez';
UPDATE blagajna SET znesek = znesek + 5
WHERE ime = 'Metka';
COMMIT;
READ COMMITED
.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE | REPEATABLE READ |
READ COMMITTED | READ UNCOMMITTED;
CREATE FUNCTION function_name(p1 type, p2 type)
RETURNS INTEGER AS
BEGIN
-- koda ...
END;
LANGUAGE language_name;
CREATE FUNCTION povecaj(n INTEGER)
RETURNS INTEGER AS
$$
BEGIN
RETURN n + 1;
END;
$$
LANGUAGE plpgsql;
SELECT povecaj(20);
INSERT
, UPDATE
, DELETE
.CREATE TABLE zaposleni (
id SERIAL PRIMARY KEY,
ime TEXT NOT NULL,
priimek TEXT NOT NULL
);
CREATE TABLE zaposleni_spremembe (
id SERIAL PRIMARY KEY,
zaposleni_id INTEGER NOT NULL,
priimek TEXT NOT NULL,
spremenjeno TIMESTAMP(6) NOT NULL
);
CREATE OR REPLACE FUNCTION belezi_spremembe()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.priimek <> OLD.priimek THEN
INSERT INTO zaposleni_spremembe
(zaposleni_id, priimek, spremenjeno)
VALUES (OLD.id, OLD.priimek, now());
END IF;
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER zadnje_spremembe
BEFORE UPDATE ON zaposleni
FOR EACH ROW EXECUTE PROCEDURE belezi_spremembe();
INSERT INTO zaposleni (ime, priimek)
VALUES ('Janez', 'Novak');
INSERT INTO zaposleni (ime, priimek)
VALUES ('Metka', 'Lepše');
SELECT * FROM zaposleni;
UPDATE zaposleni SET priimek = 'Zelenko' WHERE id = 2;
SELECT * FROM zaposleni;
SELECT * FROM zaposleni_spremembe;
VIEW
)VIEW
)CREATE VIEW ime_pogleda AS
SELECT ...;
DROP VIEW ime_pogleda;
CREATE VIEW samo_priimki_zaposlenih AS
SELECT id, priimek FROM zaposleni;
SELECT * FROM samo_priimki_zaposlenih;