2013-05-29 4 views
0

У меня есть таблица с тремя разными разделами, разделенная на столбе point_of_sale. Я построил вид (massive_table) агрегировать данные из этих разделов, как так:Могу ли я обрезать таблицы динамически?

CREATE VIEW massive_table as 
SELECT * FROM massive_table_UK 
UNION ALL 
SELECT * FROM massive_table_US 
UNION ALL 
SELECT * FROM massive_table_DE; 

The massive_table_UK/US/DE таблиц каждая из которых имеет проверочное ограничение наложенное на них так, что point_of_sale столбец может содержать только значение строки либо UK, US или DE в зависимости от ситуации.

Перед секционирования, я бы подготовить таблицу новых данных, выполнив следующие действия:

DELETE FROM massive_table WHERE point_of_sale = 'UK'; 

То, что я предпочел бы, однако, укоротить соответствующий раздел. Можно ли это сделать динамически? Я посмотрел на PostgreSQL PL/pgSQL documentation и он говорит, что

Еще одно ограничение на символы параметров является то, что они работают только в SELECT, INSERT, UPDATE и DELETE команды. В других типах операторов (обычно называемых заявлениями утилиты) вы должны вставлять значения текстовым образом, даже если они являются только значениями данных.

Я довольно новичок в программировании PostgreSQL, и я изо всех сил пытаюсь понять это предложение; То, что я хотел бы иметь, - это функция, которая усекает соответствующий раздел на основе заданного значения point_of_sale. Это возможно?

ответ

1

Вам нужен динамический SQL с EXECUTE, если вы хотите передать идентификаторы (или их части) в качестве параметров:

CREATE OR REPLACE FUNCTION f_trunc(pos text) 
RETURNS void AS 
$func$ 
BEGIN 
EXECUTE format('TRUNCATE %I', massive_table_ || pos); 
END 
$func$ LANGUAGE plpgsql; 

Вот два связанных ответов с большим количеством объяснения и ссылок:

Смежные вопросы