Шпаргалка по PostgreSQL

Начал разбираться с postgre, по этому случаю какое-то время буду вести эту шпору. Поскольку я только начинаю разбираться, некоторые из решений наверняка будут неоптимальными или неполными, такое возможно. Я наивно полагал что postgre сильно похож на mysql, но выяснилось что это в общем-то не совсем так. Буду писать о PostgreSQL версии 9.2+.
  1. Смотрим с какой версией postgre имеем дело
    psql --version
    
  2. Подключаемся к выбранной БД из консоли
    psql -d db_name -U user_name
    
  3. Переключиться на выбранную бд в текущем сеансе (curent_db=# - приглашение консоли PostgreSQL, db_name - бд, на которую переключаемся)
    curent_db=# \c db_name
    
  4. Показать все таблицы в текущей бд (аналог show tables в mysql)
    curent_db=# \dt
    
  5. Показать структуру выбранной таблицы (аналог desc table_name в mysql)
    curent_db=# \d+ table_name
    
  6. Показать список доступных бд (аналог show databases в mysql)
    curent_db=# \l
    
  7. Посмотреть запрос воспроизводящий структуру таблицы (аналог show create table в mysql). Как я понял (либо не нашел пока) аналога в postgre нет. Но все же вынуть такой запрос можно, правда уже другой утилитой. По сути это будет полный дамп структуры выбранной таблицы.
    pg_dump -b db_name -U user_name -t table_name -s
    
  8. Создать дамп бд и восстановить бд из дампа (см. ссылку)
    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 
    
  9. Создаем новую БД
    create database dbname encoding 'utf8';
    
  10. Восстанавливаем бинарный дамп БД
    pg_restore -c -d db_name dump_file.dump
    
  11. Посмотреть список всех сиквенсов в бд (sequence)
    \ds
    # или
    \ds+
    
  12. Посмотреть состояние сиквенса (sequence)
    \d sequence_name
    # или
    \d+ sequence_name
    
  13. Создание, инкремент, удаление, установка нового значения сиквенса
    # создание
    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;
    
  14. Поле типа 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
    );
    
  15. Дампим выбранную из БД таблицу
    pg_dump -U userName dbName -t table_name > dump_file.sql
    
  16. Аналог просмотра текущей активности из MySQL
    SHOW FULL PROCESSLIST;
    
    В Postgresql выглядит так
    SELECT * FROM pg_stat_activity;
    
  17. Установка пароля для пользователя после чистой установки
    sudo -u postgres psql postgres
    postgres=# \password postgres
    

Хороший ресурс с туториалами по PostgreSQL - postgresqltutorial.com
Оф. мануал - тут