/bin/echo ",,," | /sbin/sfdisk -L /dev/sdX
понедельник, 25 апреля 2011 г.
Как создать раздел на весь диск?
Подобное может понадобиться в скрипте. Итак, создать раздел на весь диск размером можно следующей командой:
Восстановление MyISAM таблиц при восстановлении раздела из снапшота
Оставлю здесь, путь лежит
find /$PATH/db/ -name "*.MYI" -exec myisamchk --silent --force --fast --update-state {} \;
вторник, 19 апреля 2011 г.
JOIN по нескольким таблицам.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select id, name, a.field1, b.field2, c.field3 | |
from | |
people p left join a on (a.person_id = p id) | |
left join b on (b.person_id = p.id) | |
left join c on (c.person_id = p.id); |
среда, 13 апреля 2011 г.
YAML в perl'отворчестве
Задача: вы пишите большой perl-скрипт, который должен выполнять длительные/рутинные операции. Вы взрослый мальчик и не боитесь CPAN. Вы используете самые вкусные модули, которые помогают вам писать быстро и без изобретения велосипедов. Некоторые длительные операции порождают объекты (да, вы совсем взрослый мальчик), с которыми вы и работаете дальше.
Проблема: Чем длительнее операции, которые выполняются скриптом, тем больше времени вам требуется чтобы отладить скрипт... Например, скрипт добирается до места отладки только через 15 минут. А если при этом каждый раз выделяются значительные ресурсы?
Решение: Сериализация/десериализация объектов.
В частности, мне подошла реализация YAML из модуля (Хотя тут поговаривают, что JSON захватит мир...)
Достаточный минимум:
Проблема: Чем длительнее операции, которые выполняются скриптом, тем больше времени вам требуется чтобы отладить скрипт... Например, скрипт добирается до места отладки только через 15 минут. А если при этом каждый раз выделяются значительные ресурсы?
Решение: Сериализация/десериализация объектов.
В частности, мне подошла реализация YAML из модуля (Хотя тут поговаривают, что JSON захватит мир...)
Достаточный минимум:
use YAML qw(DumpFile LoadFile);
DumpFile('object.yml', $obj);
my $obj = LoadFile('object.yml');
вторник, 12 апреля 2011 г.
Противная ошибка в Crypt::DES
Проблема: При использовании модуля Net::SSH::Perl при попытке выполнения некоторых команд в $ssh->cmd() можно получить следующюю ошибку:
Причина: модуль Net::SSH::Perl реализован на чистом Perl и все методы шифрования пользует свои, в том числе и Crypt::DES. А последний плохо дружит в UTF-8, поэтому и отгребает ошибку.
Фикс: добавить 'utf8::downgrade($data);' в проблемный DES.pm прямо перед строкой, на которую ссылается ошибка. Например, в мое случае я заменил
на
Решение нашел на perlmonks.org.
P.S. Та же беда с Cryprt::Blowfish. Фиксится так же.
P.P.S. Можно еще попробовать чиперы другие использовать. Я не пробовал.
input must be 8 bytes long at /usr/local/lib/perl/5.10.1/Crypt/DES.pm line 57.
Причина: модуль Net::SSH::Perl реализован на чистом Perl и все методы шифрования пользует свои, в том числе и Crypt::DES. А последний плохо дружит в UTF-8, поэтому и отгребает ошибку.
Фикс: добавить 'utf8::downgrade($data);' в проблемный DES.pm прямо перед строкой, на которую ссылается ошибка. Например, в мое случае я заменил
my ($self,$data) = @_;
return Crypt::DES::crypt($data, $data, $self->{'ks'}, 1);
на
my ($self,$data) = @_;
utf8::downgrade($data);
return Crypt::DES::crypt($data, $data, $self->{'ks'}, 1);
Решение нашел на perlmonks.org.
P.S. Та же беда с Cryprt::Blowfish. Фиксится так же.
P.P.S. Можно еще попробовать чиперы другие использовать. Я не пробовал.
воскресенье, 3 апреля 2011 г.
Удаление триггеров bucardo в Postgres
Для сервисных нужд я иногда использую bucardo. Утилита внятная. Четкая документация. Работает и не жужжит :)
У нее есть одна особенность - она не удаляет триггеры из базы, даже если мы убираем ее из обработки. Это было бы не страшно, если бы лишние триггеры не замедляли работу базы. Поэтому для удаления bucardo-триггеров была написана следующая функция:
Исполнение, как обычно:
У нее есть одна особенность - она не удаляет триггеры из базы, даже если мы убираем ее из обработки. Это было бы не страшно, если бы лишние триггеры не замедляли работу базы. Поэтому для удаления bucardo-триггеров была написана следующая функция:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE FUNCTION strip_bucardo_triggers() RETURNS text AS $$ DECLARE | |
triggNameRecord RECORD; | |
triggTableRecord RECORD; | |
BEGIN | |
FOR triggNameRecord IN select distinct(trigger_name) from information_schema.triggers where trigger_schema = 'public' and trigger_name like '%bucardo%' LOOP | |
FOR triggTableRecord IN SELECT distinct(event_object_table) from information_schema.triggers where trigger_name = triggNameRecord.trigger_name LOOP | |
RAISE NOTICE 'Dropping trigger: % on table: %', triggNameRecord.trigger_name, triggTableRecord.event_object_table; | |
EXECUTE 'DROP TRIGGER ' || triggNameRecord.trigger_name || ' ON public.' || triggTableRecord.event_object_table || ';'; | |
END LOOP; | |
END LOOP; | |
RETURN 'done'; | |
END; | |
$$ LANGUAGE plpgsql SECURITY DEFINER; |
Исполнение, как обычно:
select strip_bucardo_triggers();
Подписаться на:
Сообщения (Atom)