Могу ли я вставить в программно определенную таблицу PostgreSQL, используя язык SQL? - PullRequest
4 голосов
/ 15 сентября 2011

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

Документация содержит пример раздела, в котором при вставке строки запускается триггер.Вызывается, что проверяет новую дату данных и вставляет ее соответственно в правую «дочернюю» таблицу.Он использует последовательность операторов IF и ELSIF, по одному на каждый месяц.Парень (или девушка), который поддерживает это, должен создавать новую таблицу и обновлять функцию триггера каждый месяц.

Мне не очень нравится это решение.Я хочу закодировать что-то, что будет работать идеально, и что мне не нужно будет время от времени обновлять, и это переживет меня и моих пра-пра-внуков.

Поэтому мне было интересно, могу ли ятриггер, который выглядел бы так:

INSERT INTO get_the_appropriate_table_name(NEW.date) VALUES (NEW.*);

К сожалению, все мои попытки провалились.Я пытался использовать «regclass», но безуспешно.

Короче говоря, я хочу создать строку и использовать ее в качестве имени таблицы.Это возможно?

1 Ответ

1 голос
/ 16 сентября 2011

Я как раз собирался написать триггерную функцию, используя EXECUTE для вставки в таблицу в соответствии с date_parts из now(), или сначала создать ее, если она не должна существовать ... когда я обнаружил, что кто-то уже сделал этодля нас - прямо под главой документов, которые вы ссылаетесь на себя:
http://www.postgresql.org/docs/9.0/interactive/ddl-partitioning.html

Прокрутите до самого пользователя "Комментарии пользователей".Лабан Мванги опубликовал пример.

Обновление:

С тех пор ветка / интерактивная руководства Postgres была удалена, ссылки перенаправлены на ветку /static.Таким образом, комментарий, на который я ссылался, исчез.Посмотрите на эти позже, тесно связанные ответы для получения подробных инструкций:

Для разбиения на данный момент есть лучшие решения, такие как разделение диапазонов в Postgres 10. Пример:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...