Начал разбираться с postgre, по этому случаю какое-то время буду вести эту шпору. Поскольку ...
Начал разбираться с postgre, по этому случаю какое-то время буду вести эту шпору. Поскольку я только начинаю разбираться, некоторые из решений наверняка будут неоптимальными или неполными, такое возможно. Я наивно полагал что postgre сильно похож на mysql, но выяснилось что это в общем-то не совсем так. Буду писать о PostgreSQL версии
9.2+.
-
Смотрим с какой версией postgre имеем дело
psql --version
-
Подключаемся к выбранной БД из консоли
psql -d db_name -U user_name
-
Переключиться на выбранную бд в текущем сеансе (curent_db=# - приглашение консоли PostgreSQL, db_name - бд, на которую переключаемся)
curent_db=# \c db_name
-
Показать все таблицы в текущей бд (аналог show tables в mysql)
curent_db=# \dt
-
Показать структуру выбранной таблицы (аналог desc table_name в mysql)
curent_db=# \d+ table_name
-
Показать список доступных бд (аналог show databases в mysql)
curent_db=# \l
-
Посмотреть запрос воспроизводящий структуру таблицы (аналог show create table в mysql). Как я понял (либо не нашел пока) аналога в postgre нет. Но все же вынуть такой запрос можно, правда уже другой утилитой. По сути это будет полный дамп структуры выбранной таблицы.
pg_dump -b db_name -U user_name -t table_name -s
-
Создать дамп бд и восстановить бд из дампа (см. ссылку)
pg_dump db_name > dump_file.sql
psql db_name < dump_file.sql
# восстанавливаем из tar
pg_restore -U user -h localhost -d db_name db_name.tar
-
Создаем новую БД
create database dbname encoding 'utf8';
-
Восстанавливаем бинарный дамп БД
pg_restore -c -d db_name dump_file.dump
-
Посмотреть список всех сиквенсов в бд (sequence)
\ds
# или
\ds+
-
Посмотреть состояние сиквенса (sequence)
\d sequence_name
# или
\d+ sequence_name
-
Создание, инкремент, удаление, установка нового значения сиквенса
# создание
create sequence seq_name start 100;
# получаем инкрементированное значение
select nextval('seq_name');
# изменяем текущее значение
alter sequence seq_name restart 120;
# последнее инкрементированное значение (аналог LAST_INSERT_ID() в MySQL)
select lastval();
# удаление сиквенса
drop sequence seq_name;
-
Поле типа auto_increment (аналог MySQL) не существует. Есть пара конструкций serial и bigserial которые для пользователя облегчают задачу создания полей с аналогичной функциональностью , автоматически транслируя
CREATE TABLE table_name (
id SERIAL,
user_name character varying(100) NOT NULL
);
в конструкцию вида
CREATE SEQUENCE table_name_id_seq;
CREATE TABLE table_name (
id integer DEFAULT nextval('table_name_id_seq') NOT NULL,
user_name character varying(100) NOT NULL
);
-
Дампим выбранную из БД таблицу
pg_dump -U userName dbName -t table_name > dump_file.sql
-
Аналог просмотра текущей активности из MySQL
SHOW FULL PROCESSLIST;
В Postgresql выглядит так
SELECT * FROM pg_stat_activity;
-
Установка пароля для пользователя после чистой установки
sudo -u postgres psql postgres
postgres=# \password postgres
Хороший ресурс с туториалами по PostgreSQL -
postgresqltutorial.com
Оф. мануал -
тут