PostgreSQL je open source objektově-relační databázový systém. Tahák na PostgreSQL

Nastavení

vytvoření uživatele a databáze

su postgres
createuser <username>
createdb <dbname>
psql
alter user <username> with encrypted password '<password>';
grant all privileges on database <dbname> to <username>;

Databáze

vytvoří UTF8 databázi <jmeno db>, vlastník je <uživatel> podle šablony template0

createdb -E UTF8 -O <uživatel> -T template0 <jmeno db>

Uživatelé

su postgres
createuser --superuser puser
echo "ALTER USER puser WITH PASSWORD '<heslo>';" | psql

při pokusu přihlášení jako puser se objeví chyba psql: FATAL: Peer authentication failed for user "puser" Lze vyřešit nahrazením ident a peer metodou md5 v souboru /var/lib/pgsql/data/pg_hba.conf

Vzdálený přístup na server

v souboru /etc/postgresql/<verze>/main/pg_hba.conf je třeba přidat řádek pro povolení síťe 10.10.29.0

host all all 10.10.29.0/24 md5

v souboru /etc/postgresql/<verze>/main/postgresql.conf je třeba nastavit adresu na které bude server naslouchat

listen_addresses='10.10.29.2'

Psql příklady

vypíše uživatele

\du

vypíše databáze

\l

přepne do databáze

\c db_name

SQL příklady

nastaví majitele databáze

ALTER DATABASE db_name OWNER TO user_name

změní heslo uživatele

ALTER USER user_name WITH PASSWORD 'pass';

vypíše sloupce, které se odkazují na konkrétní sloupec

select R.table_schema, R.table_name, R.column_name,
FK.update_rule, FK.delete_rule from
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE u inner join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS FK
    on U.CONSTRAINT_CATALOG = FK.UNIQUE_CONSTRAINT_CATALOG
    and U.CONSTRAINT_SCHEMA = FK.UNIQUE_CONSTRAINT_SCHEMA
    and U.CONSTRAINT_NAME = FK.UNIQUE_CONSTRAINT_NAME
inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE R
    ON R.CONSTRAINT_CATALOG = FK.CONSTRAINT_CATALOG
    AND R.CONSTRAINT_SCHEMA = FK.CONSTRAINT_SCHEMA
    AND R.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
WHERE U.COLUMN_NAME = 'id'
    AND U.TABLE_CATALOG = 'db_name'`
    AND U.TABLE_SCHEMA = 'public'`
    AND U.TABLE_NAME = 'table_name'`

Zobrazí, kolik zabírají jednotlivé tabulky

SELECT
    relname AS "Object",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "Total Size",
    pg_size_pretty(pg_total_relation_size(C.oid) - pg_relation_size(C.oid)) AS "External Size"
FROM
    pg_class C
LEFT JOIN
    pg_namespace N ON (N.oid = C.relnamespace)
WHERE
    nspname NOT LIKE 'pg_%'
    AND nspname != 'information_schema'
    AND relkind IN ('r', 'm', 'S', 'f')
ORDER BY
    pg_total_relation_size(C.oid) DESC;