PostgreSQL


blog.udartsev.ru

PostgreSQL перенос таблицы из одной бд. в другую + бэкап

Для переноса таблицы из одной БД в другую - лучше всего использовать командную консоль. pgAdmin3 возникают сложности без соответствующей настройки (restore).

Короче. Правила простые.

За бэкап отвечает команда: pg_dump dbname > outfile Где dbname - имя нашей БД, а outfile - название нового файла-бэкапа.

Но нам нужно бэкапнуть конкретную таблицу. Для этого пишем:

pg_dump dbname -n shema -t table > outfile

Где: shema - название схемы, а table - соответственно таблицы.


Для восстановления используем команду:

psql dbname < infile

Для конкретного пути назначения:

psql dbname -n shema < infile

Думаю, всё понятно.


Переезд с одного Ubuntu в другой Ubuntu

Меня сильно удивила простота перестановки Ubuntu на новые разделы, по сути на новый диск (т.к. разделы форматировались, двигались и изменялись размеры, их количество).

В общем всё, в отличии от мастадонта коммерции - Windows, всё крайне просто и не зателиво.

1) Просто копируем нашу дату на другой носитель. Как есть, можно без архивации.

2) Разбираемся там со всеми разделами как нам нужно, ставим Ubuntu.

3) Т.к. я пользуюсь пакетами из оф. репозитария (я про Postgres, Lighttpd, Apache, Nginx и т.п.), то просто копирую папки с нужыми пакетами как есть, с заменой свеже-установленных.

Всё!

Вот так, как оказалось, совершенно просто перенеслись все мои документы из /home и 16 гб. база данных Postgres со всеми настройками/паролями...

sudo service postgresql stop

enter image description here

sudo service postgresql start

Немного про быстродействие PostgreSQL. Поисковые запросы и индексы.

Из личного опыта по оптимизации PostgreSQL базы данных.

Объем строк: >>> 800067 raws.

Строки типа: TEXT

Разбитие строк: ,TEXT1,TEXT2,TEXT3,~~~,

>>> 800067 raws.   
 ALTER TABLE table.list ADD COLUMN itemnameTSVector TSVECTOR;
    UPDATE table.list SET itemnameTSVector = to_tsvector(itemname);
    CREATE INDEX list_GINindex ON table.list 
        USING GIN(itemnameTSVector);

Поисковый запрос без использования индекса:

>>> 7.2 sec.
SELECT * FROM table.list
WHERE itemname LIKE '%TEXT1%' 
    and itemname LIKE '%TEXT3%';

Поисковый запрос с использованием индекса:

 >>> 7.0 sec.
SELECT * FROM table.list
WHERE tsvector(itemnameTSVector)
    @@ tsquery('TEXT1 & TEXT3');

Далее пробовал с поисковым запросом без индекса, но с запятыми, как с разделителями:

>>> 7.0 sec.
SELECT * FROM table.list
WHERE itemname LIKE '%,TEXT1,%' 
    and itemname LIKE '%,TEXT3,%';

Вот и вся оптимизация. Результат на лицо.


Разносим Linux и Windows на разные диски или приключения электроника, не иначе.

Здесь такое дело. Как-то, с год назад, я начал в плотную осваивать языки программирования для моих проектов (genme.net, sistemaexport.ru).

Долго выбирал, с чего начать. И был выбран PHP, т.к. его знал немного ранее, был опыт, понимание и т.д. Тем более, что меня интересовала как многопоточность, скорость расчетов, так и серверная база.

Короче. Ковырялся в Windows с установкой denwer. Возможностей там раз-два... PostgreSQL - проблема, MySQL - проблема, PHP-cli - проблема... короче снес. Затем поставил openserver. Тоже не лучший вариант: нет многопоточности (нормального cli режима), да и с настройкой проблемы... Ну да ладно, первые скрипты были написаны там. Затем, за буквально два дня, для автономной работы был поднят сервер на ubuntu desktop. И поняслись постоянные проблемы с отладкой т.к. скрипны написаны в Windows среде, а исполняются в Linux...

Выход был найден установкой Ubuntu Desktop на лэптоп с разбивкой жесткого диска на разделы и установкой Grub.

Помогло на время - пока не закончилось место в логическом разделе Linux. А создание новых разделов привысило допустимы лимит... Выход был один - разносить системы на отдельные носители.

Решил поставить дополнительны диск в рабочий лэптоп, а т.к. слотов для подключения нового девайса нет - была найдена вот такая штуковина:

штуковина Слева - SSD. Справа - переходник вместо CDROM`а.

Весело и радужно всё запихнули в агрегат:

Процесс запихивания

И началась пляска с бубном...

1) Ранее, уже как три месяца к времени апгрейда, у меня вылетел Windows. Так что было решено перенести всю инфу и разделы на новый диск с полным копированием. Инструктаж.

2) Загружаемся с LiveCD, Фигачим в cmd:

sudo fdisk –l 
sudo dd if=/dev/sdb of=/dev/sdc

Фигня с объемом... отстой...

3) Ждем nn-ое количество времени и пытаемся восстановить Windows с уже нового носителя. Бесполезно, разделы нарушены. Мало того, т.к. диски были с точностью скопированы, название и ID разделов конфиктовали друг с другом, не дав запуститься...

4) Фарматнул новый SSD. Установил Windows с USB ISO. Скопировал через Ubuntu Live CD дату на новый SSD. Зпустил Windows. OK

5) Далее, монируем оба SSD, где SSD с Windows уходит как хламосборщик в слот от CDROM. Загружаемся с Ubuntu LiveCD, бновляем grub, пытаемся запустить linux => error, бесконечно вылетаем в emergency mode. Пытаемся запустить Windows => boot error. Кусок говна.

какаха

6) Силой мысли и форумов, пытаемся понять, что проблема в загрузочных секторах - конфликт. Проверяем bios, убеждаемся, что bios не видит новый SSD (тот, что через переходник). Это плохо, но всё возможно.

7) Думая о лучшем, удаляем boot сектор на SSD c Linux и восстанавливаем загрузчик Windows, затем Grub. Пример. Херачим:

bootrec.exe /FixMbr
bootrec.exe /FixBoot
bootsect /NT60 SYS

И update grub, ранее, а сейчас Boot Repair.

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update && sudo apt-get install -y boot-repair

И снова попадаем в замкнутый круг. Ubuntu слетает к чертям в emergency, windows не грузится.

Пытаемся решить задачу. Мы же упрямые. Да и нагадили уже по самое.

8) Выносим мозг с восстановлением разделов на старом SSD (тот, что Linux): работаем через Ubuntu Live CD с уилитой testdisk. Выискиваем глубоко и долго. Восстанавливаем нужные разделы.

9) Копируем данные linux в наш новый SSD - в мусоросборщик. Форматируем разделы и переустанавливаем Ubuntu. Запуск. OK! Ubuntu джобает. Windows сопротивляется...

10 ) Восстанавливаем загрузчик Windows... в очередной раз. Загружаемся с Windows USB, заходим в командную строку, пишем:

bootrec /FixMbr
bootrec /FixBoot

Не помогает. =) А помогает только:

bootrec /RebuildBcd

11) Грузим то-да-сё. Всё работает. Ура!

Квест пройден. Бубен порван и 24 часа жизни успешно отправлены в корзину.

Резюме: Думай дважды, юный падаван, перед началом большого пути... ;-) Нужно было сразу разносить по носителям, теперь еще и софт восстанавливать...