Postgresql 在外部表上截断

Postgresql 在外部表上截断,postgresql,Postgresql,我在postgresql 9.3.3上使用postgresql_fdw 这就是我所拥有的: 服务器A: SERVER_A=> CREATE TABLE table_a ( SERVER_A(> id integer, SERVER_A(> val varchar(10) SERVER_A(> ); SERVER_A=> INSERT INTO table_a VALUES (1, "a"); INSERT 0 1 服务器\u处于活动状态: SERVER_A

我在postgresql 9.3.3上使用postgresql_fdw

这就是我所拥有的:

服务器A:

SERVER_A=> CREATE TABLE table_a (
SERVER_A(>   id integer,
SERVER_A(>   val varchar(10)
SERVER_A(> );
SERVER_A=> INSERT INTO table_a VALUES (1, "a");
INSERT 0 1
服务器\u处于活动状态:

SERVER_ACTIVE=> CREATE FOREIGN TABLE table_a (
SERVER_ACTIVE(>  id integer,
SERVER_ACTIVE(>  val varchar(10)
SERVER_ACTIVE(> ) SERVER SERVER_A;
CREATE FOREIGN TABLE
现在我检查元素

SERVER_ACTIVE=> SELECT COUNT(*) FROM table_a;
 count
-------
     1
(1 row)
现在我要截断该表:

ACC_ACTIVE=> TRUNCATE TABLE table_a;
ERROR:  "table_a" is not a table
ACC_ACTIVE=> TRUNCATE FOREIGN TABLE table_a;
ERROR:  syntax error at or near "FOREIGN"
LINE 1: TRUNCATE FOREIGN TABLE table_a;
为什么不起作用?我如何让它工作?这个表应该包含数百万条记录,我不能使用
DELETE
。但即使我
DELETE
,我也不能使用
VACUUM

,没有提到任何关于
截断
远程表的功能。(
选择
插入
更新
删除
列为可用命令。)作为一种解决方法,您可以使用。

文档非常清楚。它说:

现在,只需从外部表中进行选择即可访问存储在其底层远程表中的数据。还可以使用INSERT、UPDATE或DELETE修改远程表。(当然,您在用户映射中指定的远程用户必须具有执行这些操作的权限。)

简而言之,postgres_fwd不支持远程(外部)表上的
TRUNCATE

您可以使用
从表中删除
;这将删除表中的所有行。它在从远程(外部)表删除数据的上下文中重新创建
TRUNCATE TABLE

我觉得上面的答案有点简单,所以我解释了一下