Запуск под Ubuntu при установленной утилите service: sudo service postgresql-8.4 start
Posts Categorized: PostgreSQL
PostgreSQL. Преобразования поля int в character
Всё просто: ALTER TABLE «my_table» ALTER COLUMN column_name TYPE character varying(100)
Место хранения таблиц PostgreSQL в CentOS
Место хранения таблиц PostgreSQL в CentOS: /var/lib/pgsql Настройки posgresql в CentOS /var/lib/pgsql/data
Транзакции и блокировка в PostgreSQL
Как оказалось транзакции не блокируют таблицу или записи (ряды), поэтому возможна ситуация когда часть одной транзакции перекроет другую (в update, например, при параллельном исполнении). Поэтому приходится блокировать,так как заблокировать ряды не получается, то блокируем всю таблицу: LOCK TABLE «MyTable» IN EXCLUSIVE MODE; Не идеальное решение с точки зрения скорости, но решение, которое гарантирует, что транзакции… Read more »
SQL escaping in 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
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
Вообще, решение проблемы я нашел здесь 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)
Пример: 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
Пример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
Писал хранимую функцию, пока не указал SETOF никак не мог вывести результат назад
Свежие комментарии