diff options
Diffstat (limited to 'contrib/postgres_fdw')
-rw-r--r-- | contrib/postgres_fdw/connection.c | 15 | ||||
-rw-r--r-- | contrib/postgres_fdw/postgres_fdw.c | 3 |
2 files changed, 14 insertions, 4 deletions
diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 0a723f0dfa1..7b9e8c1b6fa 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -326,9 +326,10 @@ configure_remote_session(PGconn *conn) * anyway. However it makes the regression test outputs more predictable. * * We don't risk setting remote zone equal to ours, since the remote - * server might use a different timezone database. + * server might use a different timezone database. Instead, use UTC + * (quoted, because very old servers are picky about case). */ - do_sql_command(conn, "SET timezone = UTC"); + do_sql_command(conn, "SET timezone = 'UTC'"); /* * Set values needed to ensure unambiguous data output from remote. (This @@ -542,8 +543,14 @@ pgfdw_xact_callback(XactEvent event, void *arg) * prepared statements, do a DEALLOCATE ALL to make sure we * get rid of all prepared statements. This is annoying and * not terribly bulletproof, but it's probably not worth - * trying harder. We intentionally ignore any errors in the - * DEALLOCATE. + * trying harder. + * + * DEALLOCATE ALL only exists in 8.3 and later, so this + * constrains how old a server postgres_fdw can communicate + * with. We intentionally ignore errors in the DEALLOCATE, so + * that we can hobble along to some extent with older servers + * (leaking prepared statements as we go; but we don't really + * support update operations pre-8.3 anyway). */ if (entry->have_prep_stmt && entry->have_error) { diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 687b87b8604..49dfe2c5edb 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -801,6 +801,9 @@ postgresGetForeignPlan(PlannerInfo *root, * The extra roundtrips involved in trying to duplicate the local * semantics exactly don't seem worthwhile (see also comments for * RowMarkType). + * + * Note: because we actually run the query as a cursor, this assumes that + * DECLARE CURSOR ... FOR UPDATE is supported, which it isn't before 8.3. */ if (baserel->relid == root->parse->resultRelation && (root->parse->commandType == CMD_UPDATE || |