понедельник, 28 марта 2011 г.

Удаленный доступ к PostgreSQL

Если пользователь не существует его нужно добавить:
CREATE USER usrname WITH PASSWORD 'PaSsWoRd';

редактируем файл /var/lib/pgsql/data/postgresql.conf
Задаем параметр
listen_addresses = '*'

далее добавляем в конец файла /var/lib/pgsql/data/pg_hba.conf

# [название базы] [имя юзера] [сеть откуда можно конектиться]
host dbname usrname 0.0.0.0/0 md5

пятница, 25 марта 2011 г.

read only доступ к PostgreSQL

#psql -U postgres -t -c "create role user_ro password 'PaSs' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;"

#psql -U postgres -qAt -c "select 'grant select on ' || tablename || ' to \"user_ro\";' from pg_tables where schemaname = 'public'" mydb | psql mydb


Теперь может точно убедиться все ли нормально сработало.
Выбираем таблицу и пробуем изменить данные в ней, выполняем sql-скрипт:
UPDATE tablename SET username='codegeist333' WHERE id=10000;

Если все номрально то увидим ошибку ERROR: permission denied for relation tablename

понедельник, 21 марта 2011 г.

yafc - configure: error: C++ preprocessor "/lib/cpp" fails sanity check

Пытался установить yafc, при ./configure получил вот такую ошибку
configure: error: C++ preprocessor "/lib/cpp" fails sanity check

Решение для Centos:
#yum install gcc-c++

Для Debian:
#apt-get install g++

среда, 16 марта 2011 г.

Удалить все таблицы из базы данных - PostreSQL

Создаем скрипт droptables.bash

#!/bin/bash
psql -t -d $1 -c "SELECT 'DROP TABLE ' || n.nspname || '.' || \
c.relname || ' CASCADE;' FROM pg_catalog.pg_class AS c LEFT JOIN \
pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace WHERE relkind = \
'r' AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND \
pg_catalog.pg_table_is_visible(c.oid)" > /tmp/droptables

psql -d $1 -f /tmp/droptables
rm -f /tmp/droptables
запускаем и в параметре указываем название базы, из которой будут удалены все таблицы
#su postgres
#./droptables.bash db_name
 

вторник, 15 марта 2011 г.

Автоматизация sFTP c помощью expect

Появилась задача по расписанию бекапить некоторый файлы на sftp.
Вот скрипт который наваял для этого.

#!/usr/bin/expect

set timeout -1
set HOST "1.1.1.1"
set PORT "22"
set USER "user"
set PASS "PsAsSwOrD"
set FILENAME  [lindex $argv 0]

spawn sftp -o "BatchMode no" -oport=$PORT $USER@$HOST:/folder/

expect "password:" { send "$PASS\r" }

expect "sftp> " { send "put $FILENAME\r" }

interact


Из конмдной строки выполняем:
#./sftp-backup /root/file.tgz