===== PostgreSQL =====
==== Administracja ====
=== Zalogowanie się do PostgreSQL za pomocą psql ===
Logujemy się na root’a:
su - postgres -c 'psql template1'
Password:
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
template1=#
=== Stworzenie użytkownika na bazie danych ===
template1=# CREATE USER uzytkownik WITH ENCRYPTED PASSWORD 'nasz_haslo';
CREATE ROLE
template1=#
=== Zmiana hasła dla użytkownika ===
template1=# ALTER USER uzytkownik WITH ENCRYPTED PASSWORD 'nowe_pass';
ALTER ROLE
template1=#
=== Usunięcie użytkownika z bazy danych ===
template1=# DROP USER uzytkownik;
DROP ROLE
template1=#
=== Stworzenie instancji na bazie danych ===
template1=# CREATE DATABASE nowa_baza;
CREATE DATABASE
template1=#
=== Stworzenie instancji na bazie danych i powiązanie jej z użytkownikiem ===
template1=# CREATE DATABASE nowa_baza WITH OWNER = uzytkownik;
CREATE DATABASE
template1=#
=== Stworzenie bazy danych z kodowaniem UTF8 i powiązanie jej z użytkownikiem ===
template1=# CREATE DATABASE nowa_baza WITH OWNER = uzytkownik ENCODING = 'UNICODE';
CREATE DATABASE
template1=#
=== Usunięcie instancji na bazie danych ===
template1=# DROP DATABASE nowa_baza;
DROP DATABASE
template1=#
=== Nadanie praw dla innego użytkownika ===
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user2;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user2;
=== Nadanie praw tylko do odczytu ===
dbname=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO user_ro;
GRANT
dbname=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO user_ro;
GRANT
=== Nadanie praw tylko do backupu ===
CREATE USER backup_user WITH ENCRYPTED PASSWORD 'password';
GRANT CONNECT ON DATABASE production to backup_user;
\c production
GRANT USAGE ON SCHEMA public to backup_user;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO backup_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup_user;
=== Wyświetlenie tabel w bazie danych ===
dbname=> \dt
List of relations
Schema | Name | Type | Owner
--------+--------------------------+-------+-------
public | cmm_application | table | user
public | cmm_dictionary | table | user
public | cmm_principal | table | user
public | cmm_register | table | user
...
=== Wyświetlenie listy użytkowników ===
template1=# SELECT * FROM pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+---------------------------------------------------------------------
postgres | 10 | t | t | t | ******** | |
phpbb | 16384 | f | f | f | ******** | |
mediawiki | 24576 | f | f | f | ******** | | {TimeZone=GMT,"DateStyle=ISO, YMD","search_path=mediawiki, public"}
uzytkownik | 25166 | f | f | f | ******** | |
(4 rows)
template1=#
=== Wyświetlenie listy instancji bazodanowych ===
template1=# SELECT * FROM pg_database;
datname | datdba | encoding | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datconfig | datacl
-----------+--------+----------+---------------+--------------+--------------+---------------+--------------+---------------+-----------+-------------------------------------
template1 | 10 | 6 | t | t | -1 | 11510 | 380 | 1663 | |
{=c/postgres,postgres=CTc/postgres}
template0 | 10 | 6 | t | f | -1 | 11510 | 380 | 1663 | |
{=c/postgres,postgres=CTc/postgres}
postgres | 10 | 6 | f | t | -1 | 11510 | 380 | 1663 | |
phpbb | 16384 | 6 | f | t | -1 | 11510 | 380 | 1663 | |
mediawiki | 24576 | 6 | f | t | -1 | 11510 | 380 | 1663 | |
nowa_baza | 25166 | 6 | f | t | -1 | 11510 | 380 | 1663 | |
(6 rows)
template1=#
==== Backup ====
=== Sam czysty SQL ===
$ data=`date +%Y_%m_%d`
$ pg_dump -h localhost -p 5432 -U user -O -b -E UTF8 -Fc -f "db_sql_$data.sql" dbname
=== Z kompresją ===
$ pg_dump -h localhost -p 5432 -U user -O -b -E UTF8 -Z 9 -Fc -f "db_sql_$data.c" "dbname"
=== Bez danych – sam schemat ===
$ pg_dump -h localhost -p 5432 -U user -O -b -E UTF8 -s -Fc -f "db_sql_$data.sql" "dbname"
=== Same dane – bez schematu ===
$ pg_dump -h localhost -p 5432 -U user -O -b -E UTF8 -a -Fc -f "db_sql_$data.sql" "dbname"
=== Wszystkie bazy ===
$ pg_dumpall -h localhost -p 5432 -U mysql -O -b -E UTF8 -f "db_allsql_$data.sql"
=== Odtwarzanie bazy danych ===
psql -h localhost -p 5432 -U user dbname < plik_db_sql.sql
=== Crontab ===
Uwaga: gdy robimy kopię zapasową za pomocą crontab’a to pojawia się problem z hasłem, ponieważ nast nie będzie przy tym, aby można było je wpisać. Aby psql nie pytał o hasło musimy w katalogu domowym użytkownika z jakiego będą wykonywane kopię wpisać do pliku $HOME/.pgpasshasło w postaci:
host:port:dbname:username:password
np:
127.0.0.1:5432:mediawiki:wiki:tajnehaslo111111111
==== Użytkowanie ====
=== Zalogowanie się do PostgreSQL za pomocą psql ===
$ psql -h localhost -p 15432 -U mediawiki mediawiki
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
mediawiki=>
=== Pokazanie struktury bazy danych ===
mediawiki=> use mediawiki
mediawiki-> \d
List of relations
Schema | Name | Type | Owner
-----------+-----------------------+----------+-----------
mediawiki | archive | table | mediawiki
mediawiki | category | table | mediawiki
mediawiki | category_id_seq | sequence | mediawiki
mediawiki | categorylinks | table | mediawiki
.
.
.
mediawiki | user_groups | table | mediawiki
mediawiki | user_newtalk | table | mediawiki
mediawiki | user_user_id_seq | sequence | mediawiki
mediawiki | watchlist | table | mediawiki
(51 rows)
mediawiki->
=== Pokazanie struktury tabeli ===
mediawiki-> \d archive
Table "mediawiki.archive"
Column | Type | Modifiers
---------------+--------------------------+--------------------
ar_namespace | smallint | not null
ar_title | text | not null
ar_text | text |
ar_page_id | integer |
ar_parent_id | integer |
ar_comment | text |
ar_user | integer |
ar_user_text | text | not null
ar_timestamp | timestamp with time zone | not null
ar_minor_edit | smallint | not null default 0
ar_flags | text |
ar_rev_id | integer |
ar_text_id | integer |
ar_deleted | smallint | not null default 0
ar_len | integer |
Indexes:
"archive_name_title_timestamp" btree (ar_namespace, ar_title, ar_timestamp)
"archive_user_text" btree (ar_user_text)
Foreign-key constraints:
"archive_ar_user_fkey" FOREIGN KEY (ar_user) REFERENCES mwuser(user_id) ON DELETE SET NULL
mediawiki->