From 8e9ea08bae93a754d5075b7bc9c0b2bc71958bfd Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Tue, 27 Apr 2021 14:41:27 +0900 Subject: Don't pass "ONLY" options specified in TRUNCATE to foreign data wrapper. Commit 8ff1c94649 allowed TRUNCATE command to truncate foreign tables. Previously the information about "ONLY" options specified in TRUNCATE command were passed to the foreign data wrapper. Then postgres_fdw constructed the TRUNCATE command to issue the remote server and included "ONLY" options in it based on the passed information. On the other hand, "ONLY" options specified in SELECT, UPDATE or DELETE have no effect when accessing or modifying the remote table, i.e., are not passed to the foreign data wrapper. So it's inconsistent to make only TRUNCATE command pass the "ONLY" options to the foreign data wrapper. Therefore this commit changes the TRUNCATE command so that it doesn't pass the "ONLY" options to the foreign data wrapper, for the consistency with other statements. Also this commit changes postgres_fdw so that it always doesn't include "ONLY" options in the TRUNCATE command that it constructs. Author: Fujii Masao Reviewed-by: Bharath Rupireddy, Kyotaro Horiguchi, Justin Pryzby, Zhihong Yu Discussion: https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com --- contrib/postgres_fdw/deparse.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'contrib/postgres_fdw/deparse.c') diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index bdc4c3620d0..7a798530e3a 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -2179,24 +2179,19 @@ deparseAnalyzeSql(StringInfo buf, Relation rel, List **retrieved_attrs) void deparseTruncateSql(StringInfo buf, List *rels, - List *rels_extra, DropBehavior behavior, bool restart_seqs) { - ListCell *lc1, - *lc2; + ListCell *cell; appendStringInfoString(buf, "TRUNCATE "); - forboth(lc1, rels, lc2, rels_extra) + foreach(cell, rels) { - Relation rel = lfirst(lc1); - int extra = lfirst_int(lc2); + Relation rel = lfirst(cell); - if (lc1 != list_head(rels)) + if (cell != list_head(rels)) appendStringInfoString(buf, ", "); - if (extra & TRUNCATE_REL_CONTEXT_ONLY) - appendStringInfoString(buf, "ONLY "); deparseRelation(buf, rel); } -- cgit v1.2.3