Psql
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;