Початок роботи з 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 в бойових умовах ці настройки обов'язково потрібно змінити під ваше залізо і вашу програму.

Схожі статті