- 25 Apr, 2014 1 commit
-
- 24 Apr, 2014 4 commits
-
-
Alvaro Herrera authored
If a tuple is locked, and this lock is later upgraded either to an update or to a stronger lock, and in the meantime some other process tries to lock, update or delete the same tuple, it (the tuple) could end up being updated twice, or having conflicting locks held. The reason for this is that the second updater checks for a change in Xmax value, or in the HEAP_XMAX_IS_MULTI infomask bit, after noticing the first lock; and if there's a change, it restarts and re-evaluates its ability to update the tuple. But it neglected to check for changes in lock strength or in lock-vs-update status when those two properties stayed the same. This would lead it to take the wrong decision and continue with its own update, when in reality it shouldn't do so but instead restart from the top. This could lead to either an assertion failure much later (when a multixact containing multiple updates is detected), or duplicate copies of tuples. To fix, make sure to compare the other relevant infomask bits alongside the Xmax value and HEAP_XMAX_IS_MULTI bit, and restart from the top if necessary. Also, in the belt-and-suspenders spirit, add a check to MultiXactCreateFromMembers that a multixact being created does not have two or more members that are claimed to be updates. This should protect against other bugs that might cause similar bogus situations. Backpatch to 9.3, where the possibility of multixacts containing updates was introduced. (In prior versions it was possible to have the tuple lock upgraded from shared to exclusive, and an update would not restart from the top; yet we're protected against a bug there because there's always a sleep to wait for the locking transaction to complete before continuing to do anything. Really, the fact that tuple locks always conflicted with concurrent updates is what protected against bugs here.) Per report from Andrew Dunstan and Josh Berkus in thread at http://www.postgresql.org/message-id/534C8B33.9050807@pgexperts.com Bug analysis by Andres Freund.
-
Tom Lane authored
Once we've completed a PREPARE, our session is not running a transaction, so its entry in pg_stat_activity should show xact_start as null, rather than leaving the value as the start time of the now-prepared transaction. I think possibly this oversight was triggered by faulty extrapolation from the adjacent comment that says PrepareTransaction should not call AtEOXact_PgStat, so tweak the wording of that comment. Noted by Andres Freund while considering bug #10123 from Maxim Boguk, although this error doesn't seem to explain that report. Back-patch to all active branches.
-
Magnus Hagander authored
Michael Paquier
-
Tom Lane authored
pg_sequence_parameters() and pg_identify_object() have had incorrect proallargtypes entries since 9.1 and 9.3 respectively. This was mostly masked by the correct information in proargtypes, but a few operations such as pg_get_function_arguments() (and thus psql's \df display) would show the wrong data types for these functions' input parameters. In HEAD, fix the wrong info, bump catversion, and add an opr_sanity regression test to catch future mistakes of this sort. In the back branches, just fix the wrong info so that installations initdb'd with future minor releases will have the right data. We can't force an initdb, and it doesn't seem like a good idea to add a regression test that will fail on existing installations. Andres Freund
-
- 23 Apr, 2014 11 commits
-
-
Tom Lane authored
Before 9.4, such an aggregate couldn't be declared, because its final function would have to have polymorphic result type but no polymorphic argument, which CREATE FUNCTION would quite properly reject. The ordered-set-aggregate patch found a workaround: allow the final function to be declared as accepting additional dummy arguments that have types matching the aggregate's regular input arguments. However, we failed to notice that this problem applies just as much to regular aggregates, despite the fact that we had a built-in regular aggregate array_agg() that was known to be undeclarable in SQL because its final function had an illegal signature. So what we should have done, and what this patch does, is to decouple the extra-dummy-arguments behavior from ordered-set aggregates and make it generally available for all aggregate declarations. We have to put this into 9.4 rather than waiting till later because it slightly alters the rules for declaring ordered-set aggregates. The patch turned out a bit bigger than I'd hoped because it proved necessary to record the extra-arguments option in a new pg_aggregate column. I'd thought we could just look at the final function's pronargs at runtime, but that didn't work well for variadic final functions. It's probably just as well though, because it simplifies life for pg_dump to record the option explicitly. While at it, fix array_agg() to have a valid final-function signature, and add an opr_sanity test to notice future deviations from polymorphic consistency. I also marked the percentile_cont() aggregates as not needing extra arguments, since they don't.
-
Peter Eisentraut authored
This was broken in 26cd1d7d.
-
Peter Eisentraut authored
These are test files added by f9179685.
-
Heikki Linnakangas authored
We no longer have a TLI field in the page header.
-
Heikki Linnakangas authored
Amit Langote
-
Heikki Linnakangas authored
-
Heikki Linnakangas authored
When marking a branch as half-dead, a pointer to the top of the branch is stored in the leaf block's hi-key. During normal operation, the high key was left in place, and the block number was just stored in the ctid field of the high key tuple, but in WAL replay, the high key was recreated as a truncated tuple with zero columns. For the sake of easier debugging, also truncate the tuple in normal operation, so that the page is identical after WAL replay. Also, rename the 'downlink' field in the WAL record to 'topparent', as that seems like a more descriptive name. And make sure it's set to invalid when unlinking the leaf page.
-
Tom Lane authored
Some ancient comments claimed that fn_nargs could be -1 to indicate a variable number of input arguments; but this was never implemented, and is at variance with what we ultimately did with "variadic" functions. Update the comments.
-
Bruce Momjian authored
Revert due to contrib/test_decoding regression failure
-
Bruce Momjian authored
Report by Andrew Dunstan
-
- 22 Apr, 2014 16 commits
-
-
Bruce Momjian authored
-
Bruce Momjian authored
Patch by Amit Langote Report by Backpatch through
-
Bruce Momjian authored
Patch by Sehrope Sarkuni
-
Bruce Momjian authored
Patch by Christoph Berg
-
Bruce Momjian authored
Patch by Rajeev rastogi
-
Bruce Momjian authored
Patch by Ants Aasma
-
Bruce Momjian authored
Patch by Fujii Masao Report by Emanuel Calvo
-
Bruce Momjian authored
Serializable transactions won't work on a Hot Standby. Also fix VACUUM/ANALYZE label mixup. Patch by Martín Marqués
-
Bruce Momjian authored
Also update regression tests Patch by Michael Paquier
-
Heikki Linnakangas authored
Forgot to update LSN of left sibling's page, when creating a new root. I fixed this for regular insertions and page splits earlier, but missed new root creation.
-
Heikki Linnakangas authored
The README incorrectly claimed that GIN posting tree pages contain an array of uncompressed items in addition to compressed posting lists. Earlier versions of the GIN posting list compression patch worked that way, but not the one that was committed.
-
Peter Eisentraut authored
Now that we have accumulated two different "replication slot" concepts, make the index entries consistent.
-
Heikki Linnakangas authored
When modifying a page, must hold an exclusive lock. A shared lock is obviously not good enough.
-
Heikki Linnakangas authored
It makes no difference to the system, but minimizing the differences between a master and standby makes debugging simpler.
-
Heikki Linnakangas authored
A couple of typos from my refactoring of the page deletion patch.
-
Heikki Linnakangas authored
Don't use simple_heap_insert to insert the tuple to a sequence relation. simple_heap_insert creates a heap insertion WAL record, and replaying that will create a regular heap page without the special area containing the sequence magic constant, which is wrong for a sequence. That was not a bug because we always created a sequence WAL record after that, and replaying that overwrote the bogus heap page, and the transient state could never be seen by another backend because it was only done when creating a new sequence relation. But it's simpler and cleaner to avoid that in the first place.
-
- 21 Apr, 2014 1 commit
-
-
Tom Lane authored
pgss_post_parse_analyze() neglected to pass the call on to any earlier occupant of the post_parse_analyze_hook. There are no other users of that hook in contrib/, and most likely none in the wild either, so this is probably just a latent bug. But it's a bug nonetheless, so back-patch to 9.2 where this code was introduced.
-
- 20 Apr, 2014 2 commits
-
-
Robert Haas authored
Etsuro Fujita
-
Robert Haas authored
Etsuro Fujita
-
- 19 Apr, 2014 4 commits
-
-
Bruce Momjian authored
Report by Alexey Bashtanov
-
Bruce Momjian authored
Report by Craig Ringer
-
Bruce Momjian authored
Mention impossibility of moving tablespaces, backing them up independently, or the inadvisability of placing them on temporary file systems. Patch by Craig Ringer, adjustments by Ian Lawrence Warwick and me
-
Bruce Momjian authored
Previously, these functions treated "" optin values as defaults in some ways, but not in others, like when comparing to .pgpass. Also, add documentation to clarify that now "" and NULL use defaults, like PQsetdbLogin() has always done. BACKWARD INCOMPATIBILITY Patch by Adrian Vondendriesch, docs by me Report by Jeff Janes
-
- 18 Apr, 2014 1 commit
-
-
Magnus Hagander authored
Amit Langote
-