Вопросы по SQL и другие аспекты работы PostgreSQL

warning: Creating default object from empty value in /var/www/victor/web/pgdocs.ru/data/modules/taxonomy/taxonomy.pages.inc on line 33.
Здесь обсуждаются запросы на SQL в PostgreSQL. Оптимизация запросов, реализация, подходы и т.д.

Подход к изготовления дистрибутивов/обновлений базы данных

Всем Добрый День!

1. В Installed версия продукта, пользователь сам ставит PostgreSql на своем сервере и сам обновляет базу данных из присылаемых нами скриптов (всего у нас: 680 - хранимых процедур + 90 - таблиц + тригеров тоже есть)

В процессе работы:
- итерируем хранимые процедуры (proc_00...proc_XX), когда они начитают использовать новые входные или выходные данные
- пишем вручную N скриптов по постепенному изменению схемы БД (редактор использовать нельзя...)

Отправка обновления пользователям:

PSQLv.8.4 error DataB

Вот такие дела, прошло около двух месяцев как поставил PSQLv.8.4
в один прекрасный момент происходит следующее...(что то картинка не вставляется)
текст ошибки - The following error occurred when trying to open the database: Failed to establish a connection to '127.0.0.1.'
Первый раз сталкиваюсь с этим, подскажите как быть.

Как понять работу оптимизатора?

Есть запрос

EXPLAIN 
SELECT * FROM TABLE
WHERE fk_id=x;

если x=33, ответ такой
"Seq Scan on table  (cost=0.00..422.09 rows=14791 width=66)"
"  Filter: (fk_id = 33)"

если x=32, ответ такой
"Index Scan using table_fk_id_idx on table  (cost=0.00..48.82 rows=108 width=66)"
"  Index Cond: (fk_id = 32)"

Оба значения присутствуют в ключевой таблице до создания индекса. Как понять работу оптимизатора? и как добиться чтоб при изменении x план не изменялся?

Индекс на динамическое значение

Добрый день, гуру =)
Проблема моя в следующем.

reverse index или что-то другое

Здравствуйте!
имеется таблица с полями surname , name, birthday. Все они с типом text.
Причем дата в birthday хранится как 'дд.ММ.гггг'.
Все поля имеют свои индексы.
Но поиск длится очень медленно, если нужно искать по последним двум цифрам года.
Например:

SELECT * FROM TABLE WHERE surname LIKE 'Иван%' AND birthday LIKE '%86';

(Записей в базе ну очень много).
Есть мысль создать реверсивный индекс, но как его сделать, не могу найти.

проблема в работе PostgreSQL

При запуске Holdem Manager, выдает вот такую табличку:
http://s002.radikal.ru/i199/1002/93/c4adc8b3d9e8.jpg

затем нажимаю "YES", выходит еще одна табличка... и далее ничего путевого...

что делать??? помогите!!!

Поиск LIKE по текстовому полю

Привет всем. Столкнулся с такой проблемой.

Есть таблица, в ней текстовое поле в которое пишется различный текст.
Случилось так, что в этот текстовый столбец записали текст следующего вида "С\Х УДАЧНЫЙ", при записи инсерт выглядел так:

INSERT INTO my_table(...,punkt,...) VALUES (...,'C\\Х УДАЧНЫЙ',...);

Так вот, если потом попытаться найти этот пункт по полному значению:
SELECT punkt FROM my_table WHERE punkt='C\\Х УДАЧНЫЙ';

Все проходит хорошо, получаем результат.
А вот если реализовать запрос следующим образом:
 

В ПГ есть Default Constraints?

Знаю, что можно определить для колонок значение по умолчанию, но существуют ли эти "правила" как отдельные сущности как в MSSQL? Если да, то как до них добраться ? (синтаксис создания, вьюшка, таблица и тд.)
Заранее благодарю

Глюк с хранимкой на С

Изображение Loki

Имеется хранимка (триггерная функция) на С :

#include <postgres.h>
#include <executor/spi.h>
#include <commands/trigger.h>
#include <libpq-fe.h>
 
PG_MODULE_MAGIC;
 
int func(char *s0, char *s1);
extern Datum tf_func(PG_FUNCTION_ARGS);
 
PG_FUNCTION_INFO_V1(tf_func);
 
Datum tf_func(PG_FUNCTION_ARGS) {
	TriggerData *trigdata = (TriggerData *) fcinfo->context;
	Relation    rel;
	TupleDesc   tupdesc;
 
	/* часть кода опущенна */
 
	if (!CALLED_AS_TRIGGER(fcinfo)) elog(ERROR, "function trgf_upd_user is not called by trigger manager");

Собранный материал

Back to top

(С) Виктор Вислобоков, 2008-2023