Початок роботи з postgresql
Початок роботи з PostgreSQL
Щоб встановити PostgreSQL 9.2 в Ubuntu 12.10, виконайте наступні команди:
sudo apt-add-repository ppa: pitti / postgresql
sudo apt-get update
sudo apt-get install postgresql-9.2
Спробуємо попрацювати з СУБД через оболонку:
sudo -u postgres psql
Створимо тестову базу даних і тестового користувача:
postgres = # CREATE DATABASE test_database;
CREATE DATABASE
postgres = # CREATE USER test_user WITH password 'qwerty';
CREATE ROLE
postgres = # GRANT ALL privileges ON DATABASE test_database TO test_user;
GRANT
Для виходу з оболонки введіть команду \ q.
Тепер спробуємо попрацювати з створеної базою даних від імені test_user:
psql -h localhost test_database test_user
Створимо нову таблицю:
test_database => CREATE SEQUENCE user_ids;
CREATE SEQUENCE
test_database => CREATE TABLE users (
id INTEGER PRIMARY KEY DEFAULT NEXTVAL ( 'user_ids'),
);
NOTICE: CREATE TABLE / PRIMARY KEY will CREATE implicit INDEX "users_pkey" FOR TABLE "users"
CREATE TABLE
Зверніть увагу, що на відміну від деяких інших СУБД, в PostgreSQL немає стовпців з властивістю auto_increment. Замість цього в постгресе використовуються послідовності (sequences). На даний момент досить знати, що за допомогою функції nextval ми можемо отримувати унікальні числа для заданої послідовності:
test_database => SELECT NEXTVAL ( 'user_ids');
NEXTVAL
---------
1
(1 ROW)
test_database => SELECT NEXTVAL ( 'user_ids');
NEXTVAL
---------
2
(1 ROW)
Прописавши в якості значення за замовчуванням для поля id таблиці users значення NEXTVAL ( 'user_ids'). ми домоглися того ж ефекту, що дає auto_increment. При додаванні нових записів в таблицю ми можемо не вказувати id, тому що унікальний id буде створений автоматично. Кілька таблиць можуть використовувати одну і ту ж послідовність. Таким чином ми зможемо гарантувати, що значення деяких полів у цих таблиць не перетинаються. У цьому сенсі послідовності гнучкіші, ніж auto_increment.
Точно таку ж таблицю можна створити і за допомогою всього лише однієї команди:
test_database => CREATE TABLE users2 (id SERIAL PRIMARY KEY, login CHAR (64), password CHAR (64));
NOTICE: CREATE TABLE will CREATE implicit SEQUENCE "users2_id_seq" FOR serial COLUMN "users2.id"
NOTICE: CREATE TABLE / PRIMARY KEY will CREATE implicit INDEX "users2_pkey" FOR TABLE "users2"
CREATE TABLE
Як бачите, послідовність для поля id була створена автоматично.
Тепер за допомогою команди \ d можна ознайомитися зі списком всіх доступних таблиць, а за допомогою \ d users - побачити опис таблиці users. Якщо ви не отримали цікаву для вас інформацію, спробуйте \ d + замість \ d. Для відображення довідки по командам скажіть \ h.
Важливо відзначити, що в PostgreSQL за замовчуванням імена таблиць і стовпців приводяться до нижнього регістру. Якщо це поведінка небажано, можна скористатися подвійними лапками:
test_database => CREATE TABLE "anotherTable" ( "someValue" VARCHAR (64));
CREATE TABLE
test_database => SELECT * FROM anotherTable;
ERROR: relation "anothertable" does NOT exist
LINE 1: SELECT * FROM anotherTable;
^
test_database => SELECT * FROM "anotherTable";
someValue
-----------
(0 ROWS)
В іншому робота з PostgreSQL мало чим відрізняється від роботи з будь-якою іншою реляційної СУБД:
test_database => INSERT INTO users (login, password) VALUES ( 'afiskon', '123456');
INSERT 0 1
test_database => SELECT * FROM users;
Якщо зараз ви спробуєте підключитися до постгресу з іншої машини, то зазнаєте невдачі:
psql -h 192.168.0.1 test_database test_user
psql: could not connect to server: Connection refused
Is the server running on host "192.168.0.1" and accepting
TCP / IP connections on port 5432?
Щоб виправити це, додайте рядок:
... в файл /etc/postgresql/9.2/main/postgresql.conf, а також:
host all all 192.168.0.1/16 md5
... в файл /etc/postgresql/9.2/main/pg_hba.conf і скажіть:
sudo service postgresql restart
Тепер все має працювати.
pg_dump -c -h 192.168.0.1 -U test_user test_database> ./dump.sql
Якщо у вас велика база даних, зверніть також увагу на підтримку утилітою pg_dump прапора -Fc.
Відновлення з резервної копії:
cat dump.sql | psql -h 192.168.0.1 test_database test_user
Під час створення резервної копії ви можете отримати помилку на зразок такої:
pg_dump: server version: 9.2.4; pg_dump version: 9.1.9
pg_dump: aborting because of server version mismatch
Наскільки мені відомо, єдине нормальне рішення цієї проблеми - чесно тримати всюди одну і ту ж версію PostgreSQL.
Врахуйте, що настройки PostgreSQL за замовчуванням припускають, що ви намагаєтеся запустити його на мікрохвильовці. Перед використанням PostgreSQL в бойових умовах ці настройки обов'язково потрібно змінити під ваше залізо і вашу програму.