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

Проблема в реализации

Здравствуйте!
Postgresql изучаю из любопытства и проф. интересов. и на кое каком примере у меня возникла проблема в реализации, вот собственно запрос:
SELECT * FROM (SELECT tablelink FROM tarifs WHERE tarif_id = 4) AS alias_x WHERE alias_x.id = 80
Суть такова, пытаюсь в подзапросе вытащить из таблицы tarifs поле tablelink (character verying) и затем уже сделать select * по этой таблице, но к сожалению что то не выходит.
Прошу помощи! Как это возможно реализовать?
Заранее спасибо!

SUM() по условию

CREATE TABLE sample (
  id int,
  num int,
  cond BOOLEAN
);

INSERT INTO sample (id, num, cond) VALUES
(1, 100, true),
(1, 20, true),
(1, 50, false),
(1, 75, false),
(2, 20, false),
(2, 80, true),
(2, 50, false),
(1, 10, true);

Выводим сумму num для каждого id

SELECT id, SUM(num) FROM sample GROUP BY id;
 id | sum 
----+-----
  2 | 150
  1 | 255

Здесь тоже самое, но с условием, что cond = true

SELECT id, SUM(num) AS sum_with_true_cond FROM sample WHERE cond = true GROUP BY id;
 id | sum_with_true_cond 

DISTINCT ON (first_column) + ORDER BY second_column

CREATE TABLE sample (
  first_column int,
  second_column int
);

Нужно сделать выборку с условием DISTINCT ON ( first_column )
Но при этом postgresql требует в ORDER BY первым полем ставить first_column
А мне нужна сортировка совсем по другому полю ( second_column ).

Можно ли такое реализовать средствами sql в postgresql не прибегая к вложенным запросам ?

Хранение изображения и *.doc файлов в базе данных

Привет всем. Помнится мне, что в Oracle была возможность запихать рисунок в базу данных с удаленного хоста и извлекать его из нее по мере необходимости.
После поисков по инету нашел следующий рецепт (как я понял, данный метод используется только для хранения изображений):

CREATE TABLE image (
    name            text,
    raster          oid
);
 
INSERT INTO image (name, raster)
    VALUES ('beautiful image', lo_import('/etc/motd'));
 
SELECT lo_export(image.raster, '/tmp/motd') FROM image
    WHERE name = 'beautiful image';

Аргументы функции

Добрый день. Кто-нибудь мне подскажет, существует ли в Postgres возможность проверки аргументов функции внутри функции? То есть, например, есть функция func (a,b). Есть вероятность, что параметр b может быть не передан. Как проверить параметры внутри функции? Существует ли такая возможность?

Конкантенация строк и NULL

Делаем например склейку полей в одно ФИО:
(((c.fio_f::text || ' '::text) || c.fio_i::text) || ' '::text) || c.fio_o::text AS fio

Если хотя бы одно из значений NULL, то вся строчка будет NULL, что не есть хорошо.

Как эту проблему обойти?

Как быть с доступом к таблице?

Добрый день!
Я не так давно работаю с postgreSQL и поэтому возможно вопрос глупый но все же...
Хотелось бы знать есть ли возможность обходить ошибку:
'db_name' is being accessed by other users

Ситуация возникает при попытке создать новую базу данных на основе существующей 'db_name'. Собственно вот сам запрос:
CREATE DATABASE 'new_db_name' OWNER='new_generated_user' TEMPLATE='db_name'
Саму ошибку я понимаю, что она из себя представляет. Но хотелось бы знать возможно ли все же выполнить этот запрос не смотря на возникающую ошибку?

Синхронизация таблиц в PostgreSQL

Такая ситуация: есть две базы данных на одном сервере у этих двух баз есть одинаковые таблицы. Можно ли эти две таблицы синхронизировать в самом PostgreSQL не прибегая к внешним скриптам, усложняя задачу это нужно делать по запросу есть ли в PostgreSQL какой нибудь планировщик? Впринцепе набор запросов для обновления у меня есть только вот я не знаю как подключиться к двум базам одновременно и выполнить запрос?

INSERT в дочернюю таблицу, как дополнение существующей записи в родительской

CREATE TABLE tst (
  id serial,
  col1 int
);
 
CREATE TABLE tst_child (
  col2 int
) INHERITS(tst);

Делая INSERT в tst_child я автоматически получаю запись в tst.

Но возможно ли сделать вставку в tst_child, уже как дополнение к существующей записи в tst,
или другого варианта, как удалить запись в tst, затем INSERT в tst_child нет ?

Inserts. Как сделать быстрее?

Таблица 1000 стобцов типа int.
Время вставки 10000 строк - 35 секунд.
Для Mysql те же операции - 16 секунд.
Можно ли догнать и перегнать Mysql?

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

Back to top

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