Вопросы по 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. Оптимизация запросов, реализация, подходы и т.д.

Неожиданная ошибка при удалении записей

-- Команда вида:

delete from table1 where fieldA=(select fieldA from table2);

/* где table2 содержит 1 запись, приводит к ошибке:
58P01 ОШИБКА: не удалось получить состояние транзакции 1575170
58P01 ПОДРОБНОСТИ: Не удалось открыть файл "pg_subtrans/0018": Нет такого файла или каталога.
*/

-- Лечится изменением синтаксиса на:

delete from table1 t1 where exists(select 1 from table2 t2 where t2.fieldA=t1.fieldA);

-- У кого какие мысли по этому поводу? Т.е. не какой вариант правильнее, а почему ТАКАЯ ошибка?

Перенести данные из одной таблицы в другую

Здравствуйте! Скажите как сначала перенести данные из одной таблицы А, в таблицу B, которые находятся в одной базе (разные имена и количество столбцов в таблицах), это я так понимаю через Insert. А потом один раз (через время) нужно будет обновить данные в таблице A в двух столбцах, данными из таблицы B (при этом остальные данные не должны измениться). если можно небольшой пример. Заранее благодарен

Помогите скопировать существующую базу и запустить ее рядом на том же сервере (каждый день)

Добрый день.
Есть сервак, на котором крутятся базы 1С под постгресом, нужно существующие базы копировать каждый день, и класть их рядом в тестовую базу для экспериментов программистов и бухгалтеров. Задачу нужно выполнять каждый день.
Помогите решить задачу.

Но как?!!

Делаем такую вещь:
$ create table testt (id serial PRIMARY KEY, val text not null);
$ insert into testt (val) values ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9');
....(повторяем несколько раз след строку)....
$ insert into testt (id, val) select nextval('testt_id_seq'::regclass), currval('testt_id_seq'::regclass) + val::integer from testt;

Далее, повторяем несколько раз:
$ select * from testt where id = (random()* 100000)::integer;

И иногда выскакивает что-то типа такого:
id | val
-------+--------
11894 | 15051
29233 | 42198
80725 | 90213

Рекурсивная таблица.

Заранее прошу не ругатся и не тыкать пальцем с криками нуб, я только студент 2 курса и мне нужна помощь.

Тут база данных каталога фильмов. По заданию обязательно надо сделать одну рекурсивную таблицу.
Посоветовали сделать рекурсию в жанрах по категориям, например: Для детей - Фэнтези, Анимэ, Мультфильм, Для взрослых - Анимэ, Порн, Боевик и т.д. Слева направо выделенные таблицы - Фильмы (ИД Фильм, Название, ИД Студия, Дата выпуска, ИД Формат ), Соединительная таблица Фильмов и жанров (ИД Фильм, ИД Жанр), Жанры ( ИД Жанр, Название ).

PgQuery - исполнитель запросов.

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

Я написал на C# (.NET Framework 4) небольшую программку типа "MySQL Query Browser" для выполнения запросов в графическом виде т.к. найти подходящую не смог. Если кому-нибудь интересно то прошу: http://yaleh.narod2.ru/PGQuery.zip

Пожелания, предложения и здоровая критика приветствуется.

Скрипт в Windows с проверкой наличия базы и создание базы при ее отсутствии?

Всем привет!
Вот задумал написать в Windows такой файлец script.sql
который бы вызывался например так
psql -h 127.0.0.1 -U postgres -d postgres -f "C:\script.sql"
,
а внутри его хотел сделать проверку на наличие базы, и если база отсутствует, то создать ее и накатить дамп. Но если база есть, то не накатывать дамп соответственно, а сделать кое-что другое, например вызвать какую-нть функцию.
И что-то я завис. В Постгрессе не мастер.

Вычисление выражений

Сам вопрос
Есть таблица, в которой хранятся формулы, например (([A]+[B])/[C]-[D])*1,5
В другой таблице есть уникальные записи с такими аббревиатурами и числовыми значениям.
Нужно подставить значения и вычислить получившееся выражение.
Предложите нилучший способ это сделать.

Мой вариант
Я сделал, но как-то мне кажется не очень эффективно и у меня есть места, где вообще кое-что не получилось. Хочется узнать ваши мысли по вопросу.
Делал следующим образом.

Работа с partitions, перенос данных в нужную таблицу - есть вопрос при динамическом создании таблиц.

С Партишенс разобрался "с пол-пинка", всё работает отлично. До тех пор, пока я не захотел сделать создание таблиц динамически. То есть, я не хочу заранее создавать таблицы "впрок", а чтобы это делалось внутри триггера вставки данных. И вот тут наступил на грабли... Либо я что-то "не так" делаю, либо такая возможность не особо предусматривалась?

Итак. Есть "базовая" таблица, для неё делаю триггер вставки данных. Внутри триггера определяю вставку данных в другую таблицу. Особенность в том, что имя таблицы определяется так:

возможно ли настроить репликацию между базой версии 8,4,5 и базой 9,1,3?

Собственно в силу некоторых обстоятельств получилось два сервера основной: opensuse 11.3 postgresql 8.4.5 и резервный opensuse 12.1 postgresql 9.1.3.
Так вот возможно ли настроить какими-либо средствами репликацию между базами postgres при условии, что 8.4.5 это основная база, а 9.1.3 резервная база.

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

Back to top

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