Tom Lane [Tue, 30 Mar 2010 21:58:11 +0000 (21:58 +0000)]
Fix "constraint_exclusion = partition" logic so that it will also attempt
constraint exclusion on an inheritance set that is the target of an UPDATE
or DELETE query. Per gripe from Marc Cousin. Back-patch to 8.4 where
the feature was introduced.
Change the retry-loop in standby mode to also try restoring files from
pg_xlog directory. This is essential for replaying WAL records that
were streamed from the master, after a standby server restart.
If a corrupt record is seen in a file restored from the archive or
streamed from the master, log it as a WARNING and keep retrying. If the
corruption is permanent, and not just a glitch in the whatever copies the
files to the archive or a network error not caught by CRC checks in TCP
for example, we will keep retrying and logging the WARNING indefinitely.
But that's better than shutting down completely, the standby is still
useful for running read-only queries. In PITR the recovery ends at such a
corrupt record, which is a bit questionable, but that's the behavior we
had in previous releases and we don't feel like chaning it now. It does
make sense for tools like pg_standby.
Simon Riggs [Mon, 29 Mar 2010 18:50:36 +0000 (18:50 +0000)]
Edit recovery.conf.sample so it matches docs. Change standby_mode
example to 'on or 'off' rather than 'true' or 'false', as shown
in docs. Add restartpoint_command. Add section header for recovery
target parameters, matching docs.
Tom Lane [Sun, 28 Mar 2010 22:59:34 +0000 (22:59 +0000)]
Rework join-removal logic as per recent discussion. In particular this
fixes things so that it works for cases where nested removals are possible.
The overhead of the optimization should be significantly less, as well.
Simon Riggs [Sun, 28 Mar 2010 09:27:02 +0000 (09:27 +0000)]
Derive latestRemovedXid for btree deletes by reading heap pages. The
WAL record for btree delete contains a list of tids, even when backup
blocks are present. We follow the tids to their heap tuples, taking
care to follow LP_REDIRECT tuples. We ignore LP_DEAD tuples on the
understanding that they will always have xmin/xmax earlier than any
LP_NORMAL tuples referred to by killed index tuples. Iff all tuples
are LP_DEAD we return InvalidTransactionId. The heap relfilenode is
added to the WAL record, requiring API changes to pass down the heap
Relation. XLOG_PAGE_MAGIC updated.
Tom Lane [Thu, 25 Mar 2010 15:50:10 +0000 (15:50 +0000)]
Fix ginint4_queryextract() to actually do what it was intended to do for an
unsatisfiable query, such as indexcol && empty_array. It should return -1
to tell GIN no scan is required; but silly typo disabled the logic for that,
resulting in unnecessary "GIN indexes do not support whole-index scans" error.
Per bug report from Jeff Trout.
Alvaro Herrera [Thu, 25 Mar 2010 14:44:34 +0000 (14:44 +0000)]
Prevent ALTER USER f RESET ALL from removing the settings that were put there
by a superuser -- "ALTER USER f RESET setting" already disallows removing such a
setting.
Apply the same treatment to ALTER DATABASE d RESET ALL when run by a database
owner that's not superuser.
Simon Riggs [Wed, 24 Mar 2010 21:25:50 +0000 (21:25 +0000)]
Change replication connection log format to allow for a database
called replication. Add host and port details, following format
of messages in BackendInitialize().
Simon Riggs [Wed, 24 Mar 2010 20:11:12 +0000 (20:11 +0000)]
Reduce CPU utilisation of WALSender process. Process was using 10% CPU
doing nothing, caused by naptime specified in milliseconds yet units of
pg_usleep() parameter is microseconds. Correctly specifying units
reduces call frequency by 1000. Reduction in CPU consumption verified.
Tom Lane [Wed, 24 Mar 2010 17:05:45 +0000 (17:05 +0000)]
Fix thinko in log message for "sameuser" ident map mismatch: the provided
and authenticated usernames were swapped. Reported by Bryan Henderson
in bug #5386.
Also clean up poorly-maintained header comment for this function.
Itagaki Takahiro [Tue, 23 Mar 2010 01:29:22 +0000 (01:29 +0000)]
Each worker thread will have its own log file in pgbench to avoid interleaved
writes. The first worker still uses "pgbench_log.<pid>" for the name, but
additional workers use "pgbench_log.<pid>.<serial-number>" instead.
Tom Lane [Mon, 22 Mar 2010 13:57:16 +0000 (13:57 +0000)]
Fix an oversight in join-removal optimization: we have to check not only for
plain Vars that are generated in the inner rel and used above the join, but
also for PlaceHolderVars. Per report from Oleg K.
Michael Meskes [Sun, 21 Mar 2010 11:56:45 +0000 (11:56 +0000)]
ECPG's parser now accepts and handles variables as arguments for the FREE command.
Informix allows variables as argument to the embedded SQL command FREE. Given
that we only allow freeing cursors via FREE for compatibility reasons only we
should do the same.
Michael Meskes [Sun, 21 Mar 2010 10:49:52 +0000 (10:49 +0000)]
ECPG only copied #include statements instead of processing them according to
commandline option "-i". This change fixes this and adds a test case. It also
honors #include_next, although this is probably never used for embedded SQL.
Simon Riggs [Sat, 20 Mar 2010 07:49:48 +0000 (07:49 +0000)]
Further corrections of mismatching struct and btree SizeOf macros.
In this case, correction is to remove now unused fields from struct.
Since these were unused and full of garbage anyway, no version change.
Tom Lane [Sat, 20 Mar 2010 00:58:09 +0000 (00:58 +0000)]
Clear error_context_stack and debug_query_string at the beginning of proc_exit,
so that we won't try to attach any context printouts to messages that get
emitted while exiting. Per report from Dennis Koegel, the context functions
won't necessarily work after we've started shutting down the backend, and it
seems possible that debug_query_string could be pointing at freed storage
as well. The context information doesn't seem particularly relevant to
such messages anyway, so there's little lost by suppressing it.
Back-patch to all supported branches. I can only demonstrate a crash with
log_disconnections messages back to 8.1, but the risk seems real in 8.0 and
before anyway.
Tom Lane [Fri, 19 Mar 2010 22:54:41 +0000 (22:54 +0000)]
Modify error context callback functions to not assume that they can fetch
catalog entries via SearchSysCache and related operations. Although, at the
time that these callbacks are called by elog.c, we have not officially aborted
the current transaction, it still seems rather risky to initiate any new
catalog fetches. In all these cases the needed information is readily
available in the caller and so it's just a matter of a bit of extra notation
to pass it to the callback.
Per crash report from Dennis Koegel. I've concluded that the real fix for
his problem is to clear the error context stack at entry to proc_exit, but
it still seems like a good idea to make the callbacks a bit less fragile
for other cases.
Backpatch to 8.4. We could go further back, but the patch doesn't apply
cleanly. In the absence of proof that this fixes something and isn't just
paranoia, I'm not going to expend the effort.
Tom Lane [Fri, 19 Mar 2010 20:51:30 +0000 (20:51 +0000)]
Fix oversight in btpo.xact patch; it was in fact installing garbage
in the xact field on replay, due to not writing out all the data in
the wal log struct.
Simon Riggs [Fri, 19 Mar 2010 19:31:06 +0000 (19:31 +0000)]
Clarify docs about database parameter in streaming replication primary_conninfo.
Docs were unclear on whether or not database=replication was required,
nor did they mention the FATAL error this causes if database parameter is
mentioned explicitly, whatever its value.
Simon Riggs [Fri, 19 Mar 2010 19:19:38 +0000 (19:19 +0000)]
Add connection messages for streaming replication. log_connections
was broken for a replication connection and no messages were
displayed on either standby or primary, at any debug level.
Connection messages needed to diagnose session drop/reconnect
events. Use LOG mode for now, discuss lowering in later releases.
Simon Riggs [Fri, 19 Mar 2010 17:51:42 +0000 (17:51 +0000)]
Minor tweaks on libpqrcv_connect(): ensure conninfo_repl[] is
correctly sized and expand comment to explain otherwise
undocumented use of replication connection parameter.
Simon Riggs [Fri, 19 Mar 2010 11:05:15 +0000 (11:05 +0000)]
Adjust comment in .history file to match recovery target specified. Comment
present since 8.0 was never fully meaningful, since two recovery targets
cannot be specified. Refactor recovery target type to make this change
and associated code easier to understand. No change in function.
Bug report arising from internal support question.
Simon Riggs [Fri, 19 Mar 2010 10:41:22 +0000 (10:41 +0000)]
Reset btpo.xact following recovery of btree delete page. Add btpo_xact
field into WAL record and reset it from there, rather than using
FrozenTransactionId which can lead to some corner case bugs.
Problem report and suggested route to a fix from Heikki, details by me.
Peter Eisentraut [Thu, 18 Mar 2010 13:23:57 +0000 (13:23 +0000)]
Use data-type specific conversion functions also in plpy.execute
In PLy_spi_execute_plan, use the data-type specific Python-to-PostgreSQL
conversion function instead of passing everything through InputFunctionCall
as a string. The equivalent fix was already done months ago for function
parameters and return values, but this other gateway between Python and
PostgreSQL was apparently forgotten. As a result, data types that need
special treatment, such as bytea, would misbehave when used with
plpy.execute.
Add restartpoint_command option to recovery.conf. Fix bug in %r handling
in recovery_end_command, it always came out as 0 because InRedo was
cleared before recovery_end_command was executed. Also, always take
ControlFileLock when reading checkpoint location for %r.
The recovery_end_command bug and the missing locking was present in 8.4
as well, that part of this patch will be backported separately.
Peter Eisentraut [Wed, 17 Mar 2010 22:02:44 +0000 (22:02 +0000)]
Don't link PL/Python against LOCALMODLIBS
This variable is apparently only for Python internally. In newer releases
of Python this variable pulls in more and more libraries that users are
less likely to have, leading to potential build failures.
Tom Lane [Wed, 17 Mar 2010 16:52:38 +0000 (16:52 +0000)]
Pass incompletely-transformed aggregate argument lists as separate parameters
to transformAggregateCall, instead of abusing fields in Aggref to carry them
temporarily. No change in functionality but hopefully the code is a bit
clearer now. Per gripe from Gokulakannan Somasundaram.
Tom Lane [Wed, 17 Mar 2010 15:55:50 +0000 (15:55 +0000)]
Fix incorrect example in CREATE INDEX reference page, per Josh Kupershmidt.
Also fix and uncomment an old example of creating a GIST index, and make
a couple of other minor editorial adjustments.
Tom Lane [Fri, 12 Mar 2010 22:19:19 +0000 (22:19 +0000)]
Add some logging code for unexpected cases in pgstat.c, particularly being
unable to read a stats file for reasons other than ENOENT, and having to reset
last_statrequest because it's later than current time in the collector.
Not clear if this will shed any light on the "pgstat wait timeout" business,
but it seems like a good idea in general.
In passing, do some message-style-police work on recently-added
pgstat_reset_shared_counters code.
Tom Lane [Thu, 11 Mar 2010 21:29:32 +0000 (21:29 +0000)]
Modify psql's \d printout to fold exclusion constraints in with regular
indexes, rather than printing them twice. Per my gripe when the exclusion
constraint feature was committed.
Tom Lane [Thu, 11 Mar 2010 18:43:24 +0000 (18:43 +0000)]
Sync timezone code with tzcode 2010c from the Olson group. This fixes some
corner cases that come up in certain timezones (apparently, only those with
lots and lots of distinct TZ transition rules, as far as I can gather from
a quick scan of their archives). Per suggestion from Jeevan Chalke.
Back-patch to 8.4. Possibly we need to push this into earlier releases
as well, but I'm hesitant to update them to the 64-bit tzcode without
more thought and testing.
Fix bug in KnownAssignedXidsMany(). I saw this when looking at the
assertion failure reported by Erik Rijkers, but this alone doesn't explain
the failure.