===== 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->