PostgreSQL
coub
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
powershell
python
ubuntu
vim
virtualbox
анекдот
блог
игры
интересно
стихи
цитаты
MySql: восстановить дамп бд из .gz файла
September 27, 2013
Бывает удобно распаковывать .gz файл прямо в бой вот так
gunzip -c db_dump_file.sql.gz | mysql -u root -p db_name
Vim: форматирование json
September 20, 2013
Бывает что надо серверный ответ в json отформатировать чтобы просто было удобнее читать. В vim (при установленном python) это можно сделать вот так например:
Оригинал заметки тут.
:%!python -m json.toolПонятное дело можно забросить это в .vimrc как команду, например вот так
command FormatJson execute "%!python -m json.tool"В результате вызов будет простым и запоминающимся :FormatJson
Оригинал заметки тут.
Git: Подмодули
August 13, 2013
У git есть интересная возможность включать в репозиторий проекта подмодули из других репозиториев. Например у нас есть некий проект, некая система состоящая из н-ного количества модулей. Какие-то модули могут быть опциональными и разрабатываться отдельными командами. Таким образом при очередной поставке продукта под конкретный проект можно подключать опциональные модули из других репозиториев и поддерживать их в актуальном состоянии.
Например есть три разделенных репозитория, каждый живет своей жизнью, поддерживается разными людьми
Добавление подмодуля выглядит примерно так
Например есть три разделенных репозитория, каждый живет своей жизнью, поддерживается разными людьми
- Ядровая часть (A)
- Модуль 1 (B1)
- Модуль 2 (B2)
Добавление подмодуля выглядит примерно так
# заходим в репозиторий проекта cd ~/my/repo/name # добавляем подмодуль и кладем его по относительному пути git submodule add git://github.com/chneukirchen/rack.git ./modules/rack git commit -am 'add submodule rack' git pushОперации для всех подмодулей могут выглядеть например вот так (см. git help submodule)
git submodule foreach git checkout master git submodule foreach git pullПри клонировании репозитория с такими подмодулями, подмодули нужно будет инициализировать и обновить
mkdir new_folder cd new_folder git clone git://github.com/some/repo-name.git . git submodule init git submodule updateСписок подмодулей можно посмотреть так
git submoduleЖивой пример использования подмодулей можно посмотреть вот здесь, надеюсь ссылка выживет.
Git: как внести изменения в коммит, как откатить коммит
July 28, 2013
Ситуация 1: коммит уже сделан, но пуш ещё НЕ сделан. Обнаружилось что в предыдущий коммит нужно добавить какие-то правки, или что-то убрать из него например. Можно сбросить индекс для последнего коммита в текущей рабочей версии вот так
Ситуация 2: кривой коммит сделан и уже отправлен на удаленный репозиторий (после push уже). Коммит этот надо откатить. Можно вообще-то исправить и закоммитить исправления, но мы допустим хотим просто полностью убрать этот кривой коммит чем быстрее тем лучше. Например коммит был сделан в неправильную ветку по ошибке.
git reset --soft HEAD^В таком варианте все изменения в файлах сохранятся (их покажет git status), будет сброшен только последний коммит. Теперь поправим все что нужно и закоммитим все снова, с новым комментарием.
Ситуация 2: кривой коммит сделан и уже отправлен на удаленный репозиторий (после push уже). Коммит этот надо откатить. Можно вообще-то исправить и закоммитить исправления, но мы допустим хотим просто полностью убрать этот кривой коммит чем быстрее тем лучше. Например коммит был сделан в неправильную ветку по ошибке.
# смотрим лог (%h покажет нам хэш коммита в логе) git log -20 --pretty='%h %an %ar %s' # делаем коммит с откатом 12f42c8 - это пример хэша git revert 12f42c8 # пушим этот коммит git pushТеперь в логе увидим сначала наш кривой коммит, а потом коммит с его (плохого коммита) откатом. См. git help revert
Шпаргалка по PostgreSQL
July 15, 2013
Начал разбираться с postgre, по этому случаю какое-то время буду вести эту шпору. Поскольку я только начинаю разбираться, некоторые из решений наверняка будут неоптимальными или неполными, такое возможно. Я наивно полагал что postgre сильно похож на mysql, но выяснилось что это в общем-то не совсем так. Буду писать о PostgreSQL версии 9.2+.
Хороший ресурс с туториалами по PostgreSQL - postgresqltutorial.com
Оф. мануал - тут
-
Смотрим с какой версией 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
Оф. мануал - тут