PostgreSQL команды

Posted by & filed under PostgreSQL.

Запуск под Ubuntu при установленной утилите service: sudo service postgresql-8.4 start

Транзакции и блокировка в PostgreSQL

Posted by & filed under PostgreSQL.

Как оказалось транзакции не блокируют таблицу или записи (ряды), поэтому возможна ситуация когда часть одной транзакции перекроет другую (в update, например, при параллельном исполнении). Поэтому приходится блокировать,так как заблокировать ряды не получается, то блокируем всю таблицу: LOCK TABLE «MyTable» IN EXCLUSIVE MODE; Не идеальное решение с точки зрения скорости, но решение, которое гарантирует, что транзакции… Read more »

SQL escaping in Python

Posted by & filed under PostgreSQL, python.

Довольно простая, но хорошая защита против sql инъекций: sql_part=re.escape(sql_part) В мане сказано: re.escape(string) Return string with all non-alphanumerics backslashed; что подходит для нас. P.S. Если данные передаются в UTF-8, то нужно использовать нечто другое, иначе эта функция экранирует utf-8 символы которые выходят за диапазон ascii.

duplicate key value violates unique constraint

Posted by & filed under PostgreSQL.

PGError: ERROR: duplicate key value violates unique constraint «lastsearches_pkey» Как сказано здесь нужно сделать так: Фиксим выполнив select setval(‘lastsearches_id_seq’, (select max(id) + 1 from lastsearches)); И все — заработало. Еще один вариант REINDEX INDEX lastsearches_pkey; Но у меня почему-то от ошибки это не избавило пока в pgMyAdmin в свойствах lastsearches_id_seq не указал нужное значение

auto increment в postgreSQL

Posted by & filed under PostgreSQL.

Вообще, решение проблемы я нашел здесь http://neilconway.org/docs/sequences/. На случай если ссылка будет не доступна напишу самое главное: Создание таблицы CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT, age INT4 ); SERIAL — аналог auto_increment Создание записи: INSERT INTO users (name, age) VALUES (‘Mozart’, 20);

Нижний регистр переменных в хранимых функциях (PostgreSQL, plpythonu)

Posted by & filed under PostgreSQL.

Пример: CREATE OR REPLACE FUNCTION myschema.find_available(num_State integer) RETURNS SETOF integer AS $BODY$ plan0= plpy.prepare(«SELECT id,start_available, stop_available FROM «Flat» WHERE state=$1″,[«integer»]) rv=plpy.execute(plan0,[num_State]) … BODY$ LANGUAGE ‘plpythonu’ VOLATILE … Выдает сообщение DETAIL: <type ‘exceptions.NameError’>: global name ‘num_State’ is not defined Приводим переменную num_State к нижнему регистру ( num_state) и ошибки уже нет.

Подготовленные запросы в PostgreSQL

Posted by & filed under PostgreSQL.

Пример1: PREPARE fooplan (int, text, bool, numeric) AS INSERT INTO foo VALUES($1, $2, $3, $4); EXECUTE fooplan(1, ‘Hunter Valley’, ‘t’, 200.00); Пример2: PREPARE usrrptplan (int, date) AS SELECT * FROM users u, logs l WHERE u.usrid=$1 AND u.usrid=l.usrid AND l.date = $2; EXECUTE usrrptplan(1, current_date);

SETOF в PostgreSQL

Posted by & filed under PostgreSQL.

Писал хранимую функцию, пока не указал SETOF никак не мог вывести результат назад