0

我有一个包含 3 个不同分区的表,该表在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;

每个massive_table_UK/US/DE表都施加了一个检查约束,因此该point_of_sale列只能包含一个字符串值UKUS或者DE视情况而定。

在对其进行分区之前,我将通过执行以下操作为新数据准备表:

DELETE FROM massive_table WHERE point_of_sale = 'UK';

但是,我更喜欢截断适当的分区。是否可以动态执行此操作?我查看了PostgreSQL PL/pgSQL 文档,它说

参数符号的另一个限制是它们只能在 SELECT、INSERT、UPDATE 和 DELETE 命令中使用。在其他语句类型(通常称为实用程序语句)中,您必须以文本方式插入值,即使它们只是数据值。

我对 PostgreSQL 编程很陌生,我很难理解这句话;我想做的是有一个函数可以根据给定的point_of_sale值截断适当的分区。那可能吗?

4

1 回答 1

2

EXECUTE如果要将标识符(或其部分)作为参数传递,则需要动态 SQL :

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

这是两个相关的答案,有很多解释和链接:

于 2013-05-29T03:16:21.607 回答