Postgresql 在外部表上截断
我在postgresql 9.3.3上使用postgresql_fdw 这就是我所拥有的: 服务器A: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
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
我觉得上面的答案有点简单,所以我解释了一下