aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
...
* Eliminate xmin from hash tag for predicate locks on heap tuples.Kevin Grittner2013-10-07
| | | | | | | | | | | | | | | | If a tuple was frozen while its predicate locks mattered, read-write dependencies could be missed, resulting in failure to detect conflicts which could lead to anomalies in committed serializable transactions. This field was added to the tag when we still thought that it was necessary to carry locks forward to a new version of an updated row. That was later proven to be unnecessary, which allowed simplification of the code, but elimination of xmin from the tag was missed at the time. Per report and analysis by Heikki Linnakangas. Backpatch to 9.1.
* add multixact-no-deadlock to scheduleAlvaro Herrera2013-10-04
|
* Make some isolationtester specs more completeAlvaro Herrera2013-10-04
| | | | Also, make sure they pass on all transaction isolation levels.
* isolationtester: Allow tuples to be returned in more placesAlvaro Herrera2013-10-04
| | | | | | Previously, isolationtester would forbid returning tuples in session-specific teardown (but not global teardown), as well as in global setup. Allow these places to return tuples, too.
* Ensure installation dirs are built before contents are installed (v2)Andrew Dunstan2013-09-30
| | | | | | Push dependency on installdirs down to individual targets. Christoph Berg
* Fix snapshot leak if lo_open called on non-existent object.Heikki Linnakangas2013-09-30
| | | | | | | | | | | | | lo_open registers the currently active snapshot, and checks if the large object exists after that. Normally, snapshots registered by lo_open are unregistered at end of transaction when the lo descriptor is closed, but if we error out before the lo descriptor is added to the list of open descriptors, it is leaked. Fix by moving the snapshot registration to after checking if the large object exists. Reported by Pavel Stehule. Backpatch to 8.4. The snapshot registration system was introduced in 8.4, so prior versions are not affected (and not supported, anyway).
* Backpatch pgxs vpath build and installation fixes.Andrew Dunstan2013-09-29
| | | | | | This is a backpatch of commits d942f9d9, 82b01026, and 6697aa2bc, back to release 9.1 where we introduced extensions which make heavy use of the PGXS infrastructure.
* Fix spurious warning after vacuuming a page on a table with no indexes.Heikki Linnakangas2013-09-26
| | | | | | | | | | | | | | | | | | | | There is a rare race condition, when a transaction that inserted a tuple aborts while vacuum is processing the page containing the inserted tuple. Vacuum prunes the page first, which normally removes any dead tuples, but if the inserting transaction aborts right after that, the loop after pruning will see a dead tuple and remove it instead. That's OK, but if the page is on a table with no indexes, and the page becomes completely empty after removing the dead tuple (or tuples) on it, it will be immediately marked as all-visible. That's OK, but the sanity check in vacuum would throw a warning because it thinks that the page contains dead tuples and was nevertheless marked as all-visible, even though it just vacuumed away the dead tuples and so it doesn't actually contain any. Spotted this while reading the code. It's difficult to hit the race condition otherwise, but can be done by putting a breakpoint after the heap_page_prune() call. Backpatch all the way to 8.4, where this code first appeared.
* Plug memory leak in range_cmp function.Heikki Linnakangas2013-09-25
| | | | | | | | B-tree operators are not allowed to leak memory into the current memory context. Range_cmp leaked detoasted copies of the arguments. That caused a quick out-of-memory error when creating an index on a range column. Reported by Marian Krucina, bug #8468.
* Fix pgindent comment breakageAlvaro Herrera2013-09-24
|
* Use @libdir@ in both of regress/{input,output}/security_label.sourceNoah Misch2013-09-23
| | | | | | | | Though @libdir@ almost always matches @abs_builddir@ in this context, the test could only fail if they differed. Back-patch to 9.1, where the test was introduced. Hamid Quddus Akhtar
* Fix SSL deadlock risk in libpqStephen Frost2013-09-23
| | | | | | | | | | | | | | | | | | | | | | | In libpq, we set up and pass to OpenSSL callback routines to handle locking. When we run out of SSL connections, we try to clean things up by de-registering the hooks. Unfortunately, we had a few calls into the OpenSSL library after these hooks were de-registered during SSL cleanup which lead to deadlocking. This moves the thread callback cleanup to be after all SSL-cleanup related OpenSSL library calls. I've been unable to reproduce the deadlock with this fix. In passing, also move the close_SSL call to be after unlocking our ssl_config mutex when in a failure state. While it looks pretty unlikely to be an issue, it could have resulted in deadlocks if we ended up in this code path due to something other than SSL_new failing. Thanks to Heikki for pointing this out. Back-patch to all supported versions; note that the close_SSL issue only goes back to 9.0, so that hunk isn't included in the 8.4 patch. Initially found and reported by Vesa-Matti J Kari; many thanks to both Heikki and Andres for their help running down the specific issue and reviewing the patch.
* Fix two timeline handling bugs in pg_receivexlog.Heikki Linnakangas2013-09-23
| | | | | | | | | | | | | | | | | | | | | When a timeline history file is fetched from server, it is initially created with a temporary file name, and renamed to place. However, the temporary file name was constructed using an uninitialized buffer. Usually that meant that the file was created in current directory instead of the target, which usually goes unnoticed, but if the target is on a different filesystem than the current dir, the rename() would fail. Fix that. The second issue is that pg_receivexlog would not take .partial files into account when determining when scanning the target directory for existing WAL files. If the timeline has switched in the server several times in the last WAL segment, and pg_receivexlog is restarted, it would choose a too old starting point. That's not a problem as long as the old WAL segment exists in the server and can be streamed over, but will cause a failure if it's not. Backpatch to 9.3, where this timeline handling code was written. Analysed by Andrew Gierth, bug #8453, based on a bug report on IRC.
* Rename various "freeze multixact" variablesAlvaro Herrera2013-09-16
| | | | | | | | | It seems to make more sense to use "cutoff multixact" terminology throughout the backend code; "freeze" is associated with replacing of an Xid with FrozenTransactionId, which is not what we do for MultiXactIds. Andres Freund Some adjustments by Álvaro Herrera
* Ignore interrupts during quickdie().Noah Misch2013-09-11
| | | | | | | | | Once the administrator has called for an immediate shutdown or a backend crash has triggered a reinitialization, no mere SIGINT or SIGTERM should change that course. Such derailment remains possible when the signal arrives before quickdie() blocks signals. That being a narrow race affecting most PostgreSQL signal handlers in some way, leave it for another patch. Back-patch this to all supported versions.
* Return error if allocation of new element was not possible.Michael Meskes2013-09-08
| | | | Found by Coverity.
* Close file to no leak file descriptor memory. Found by Coverity.Michael Meskes2013-09-08
|
* Don't fail for bad GUCs in CREATE FUNCTION with check_function_bodies off.Tom Lane2013-09-03
| | | | | | | | | | | | | | | | | | | | | | | The previous coding attempted to activate all the GUC settings specified in SET clauses, so that the function validator could operate in the GUC environment expected by the function body. However, this is problematic when restoring a dump, since the SET clauses might refer to database objects that don't exist yet. We already have the parameter check_function_bodies that's meant to prevent forward references in function definitions from breaking dumps, so let's change CREATE FUNCTION to not install the SET values if check_function_bodies is off. Authors of function validators were already advised not to make any "context sensitive" checks when check_function_bodies is off, if indeed they're checking anything at all in that mode. But extend the documentation to point out the GUC issue in particular. (Note that we still check the SET clauses to some extent; the behavior with !check_function_bodies is now approximately equivalent to what ALTER DATABASE/ROLE have been doing for awhile with context-dependent GUCs.) This problem can be demonstrated in all active branches, so back-patch all the way.
* Update obsolete commentAlvaro Herrera2013-09-03
|
* Stamp 9.3.0.REL9_3_0Tom Lane2013-09-02
|
* Update time zone data files to tzdata release 2013d.Tom Lane2013-09-02
| | | | | DST law changes in Israel, Morocco, Palestine, Paraguay. Historical corrections for Macquarie Island.
* Translation updatesPeter Eisentraut2013-09-02
|
* Improve regression test for #8410.Tom Lane2013-08-30
| | | | | | | The previous version of the query disregarded the result of the MergeAppend instead of checking its results. Andres Freund
* Add test case for bug #8410.Tom Lane2013-08-30
| | | | Per Andres Freund.
* Reset the binary heap in MergeAppend rescans.Tom Lane2013-08-30
| | | | | | | | Failing to do so can cause queries to return wrong data, error out or crash. This requires adding a new binaryheap_reset() method to binaryheap.c, but that probably should have been there anyway. Per bug #8410 from Terje Elde. Diagnosis and patch by Andres Freund.
* Make error wording more consistentAlvaro Herrera2013-08-29
|
* Unconditionally use the WSA equivalents of Socket error constants.Andrew Dunstan2013-08-26
| | | | | | | | | | This change will only apply to mingw compilers, and has been found necessary by late versions of the mingw-w64 compiler. It's the same as what is done elsewhere for the Microsoft compilers. Backpatch of commit 73838b5251e. Problem reported by Michael Cronenworth, although not his patch.
* Account better for planning cost when choosing whether to use custom plans.Tom Lane2013-08-24
| | | | | | | | | | | | | | | | The previous coding in plancache.c essentially used 10% of the estimated runtime as its cost estimate for planning. This can be pretty bogus, especially when the estimated runtime is very small, such as in a simple expression plan created by plpgsql, or a simple INSERT ... VALUES. While we don't have a really good handle on how planning time compares to runtime, it seems reasonable to use an estimate based on the number of relations referenced in the query, with a rather large multiplier. This patch uses 1000 * cpu_operator_cost * (nrelations + 1), so that even a trivial query will be charged 1000 * cpu_operator_cost for planning. This should address the problem reported by Marc Cousin and others that 9.2 and up prefer custom plans in cases where the planning time greatly exceeds what can be saved.
* Don't crash when pg_xlog is empty and pg_basebackup -x is usedMagnus Hagander2013-08-24
| | | | | | | | The backup will not work (without a logarchive, and that's the whole point of -x) in this case, this patch just changes it to throw an error instead of crashing when this happens. Noticed and diagnosed by TAKATSUKA Haruka
* In locate_grouping_columns(), don't expect an exact match of Var typmods.Tom Lane2013-08-23
| | | | | | | | | | | | | | | | | | | | | | | It's possible that inlining of SQL functions (or perhaps other changes?) has exposed typmod information not known at parse time. In such cases, Vars generated by query_planner might have valid typmod values while the original grouping columns only have typmod -1. This isn't a semantic problem since the behavior of grouping only depends on type not typmod, but it breaks locate_grouping_columns' use of tlist_member to locate the matching entry in query_planner's result tlist. We can fix this without an excessive amount of new code or complexity by relying on the fact that locate_grouping_columns only gets called when make_subplanTargetList has set need_tlist_eval == false, and that can only happen if all the grouping columns are simple Vars. Therefore we only need to search the sub_tlist for a matching Var, and we can reasonably define a "match" as being a match of the Var identity fields varno/varattno/varlevelsup. The code still Asserts that vartype matches, but ignores vartypmod. Per bug #8393 from Evan Martin. The added regression test case is basically the same as his example. This has been broken for a very long time, so back-patch to all supported branches.
* Fix hash table size estimation error in choose_hashed_distinct().Tom Lane2013-08-21
| | | | | | | | | | | | | | We should account for the per-group hashtable entry overhead when considering whether to use a hash aggregate to implement DISTINCT. The comparable logic in choose_hashed_grouping() gets this right, but I think I omitted it here in the mistaken belief that there would be no overhead if there were no aggregate functions to be evaluated. This can result in more than 2X underestimate of the hash table size, if the tuples being aggregated aren't very wide. Per report from Tomas Vondra. This bug is of long standing, but per discussion we'll only back-patch into 9.3. Changing the estimation behavior in stable branches seems to carry too much risk of destabilizing plan choices for already-tuned applications.
* Stamp 9.3rc1.REL9_3_RC1Tom Lane2013-08-19
|
* Be more wary of unwanted whitespace in pgstat_reset_remove_files().Tom Lane2013-08-19
| | | | | sscanf isn't the easiest thing to use for exact pattern checks ... also, don't use strncmp where strcmp will do.
* Fix removal of files in pgstats directoriesAlvaro Herrera2013-08-19
| | | | | | | | | | | | | | | Instead of deleting all files in stats_temp_directory and the permanent directory on a crash, only remove those files that match the pattern of files we actually write in them, to avoid possibly clobbering existing unrelated contents of the temporary directory. Per complaint from Jeff Janes, and subsequent discussion, starting at message CAMkU=1z9+7RsDODnT4=cDFBRBp8wYQbd_qsLcMtKEf-oFwuOdQ@mail.gmail.com Also, fix a bug in the same routine to avoid removing files from the permanent directory twice (instead of once from that directory and then from the temporary directory), also per report from Jeff Janes, in message CAMkU=1wbk947=-pAosDMX5VC+sQw9W4ttq6RM9rXu=MjNeEQKA@mail.gmail.com
* Rename the "fast_promote" file to just "promote".Heikki Linnakangas2013-08-19
| | | | | | | | | | This keeps the usual trigger file name unchanged from 9.2, avoiding nasty issues if you use a pre-9.3 pg_ctl binary with a 9.3 server or vice versa. The fallback behavior of creating a full checkpoint before starting up is now triggered by a file called "fallback_promote". That can be useful for debugging purposes, but we don't expect any users to have to resort to that and we might want to remove that in the future, which is why the fallback mechanism is undocumented.
* Fix qual-clause-misplacement issues with pulled-up LATERAL subqueries.Tom Lane2013-08-19
| | | | | | | | | | | | | | | | | | | | | | In an example such as SELECT * FROM i LEFT JOIN LATERAL (SELECT * FROM j WHERE i.n = j.n) j ON true; it is safe to pull up the LATERAL subquery into its parent, but we must then treat the "i.n = j.n" clause as a qual clause of the LEFT JOIN. The previous coding in deconstruct_recurse mistakenly labeled the clause as "is_pushed_down", resulting in wrong semantics if the clause were applied at the join node, as per an example submitted awhile ago by Jeremy Evans. To fix, postpone processing of such clauses until we return back up to the appropriate recursion depth in deconstruct_recurse. In addition, tighten the is-safe-to-pull-up checks in is_simple_subquery; we previously missed the possibility that the LATERAL subquery might itself contain an outer join that makes lateral references in lower quals unsafe. A regression test case equivalent to Jeremy's example was already in my commit of yesterday, but was giving the wrong results because of this bug. This patch fixes the expected output for that, and also adds a test case for the second problem.
* Fix pg_upgrade failure from servers older than 9.3Alvaro Herrera2013-08-19
| | | | | | | | | | | | | | When upgrading from servers of versions 9.2 and older, and MultiXactIds have been used in the old server beyond the first page (that is, 2048 multis or more in the default 8kB-page build), pg_upgrade would set the next multixact offset to use beyond what has been allocated in the new cluster. This would cause a failure the first time the new cluster needs to use this value, because the pg_multixact/offsets/ file wouldn't exist or wouldn't be large enough. To fix, ensure that the transient server instances launched by pg_upgrade extend the file as necessary. Per report from Jesse Denardo in CANiVXAj4c88YqipsyFQPboqMudnjcNTdB3pqe8ReXqAFQ=HXyA@mail.gmail.com
* Translation updatesPeter Eisentraut2013-08-18
|
* Remove relcache entry invalidation in REFRESH MATERIALIZED VIEW.Kevin Grittner2013-08-18
| | | | | | | | This was added as part of the attempt to support unlogged matviews along with a populated status. It got missed when unlogged support was removed pre-commit. Noticed by Noah Misch. Back-patched to 9.3 branch.
* libpq: Report strerror on pthread_mutex_lock() failurePeter Eisentraut2013-08-17
|
* Fix thinko in comment.Tom Lane2013-08-17
|
* Fix planner problems with LATERAL references in PlaceHolderVars.Tom Lane2013-08-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The planner largely failed to consider the possibility that a PlaceHolderVar's expression might contain a lateral reference to a Var coming from somewhere outside the PHV's syntactic scope. We had a previous report of a problem in this area, which I tried to fix in a quick-hack way in commit 4da6439bd8553059766011e2a42c6e39df08717f, but Antonin Houska pointed out that there were still some problems, and investigation turned up other issues. This patch largely reverts that commit in favor of a more thoroughly thought-through solution. The new theory is that a PHV's ph_eval_at level cannot be higher than its original syntactic level. If it contains lateral references, those don't change the ph_eval_at level, but rather they create a lateral-reference requirement for the ph_eval_at join relation. The code in joinpath.c needs to handle that. Another issue is that createplan.c wasn't handling nested PlaceHolderVars properly. In passing, push knowledge of lateral-reference checks for join clauses into join_clause_is_movable_to. This is mainly so that FDWs don't need to deal with it. This patch doesn't fix the original join-qual-placement problem reported by Jeremy Evans (and indeed, one of the new regression test cases shows the wrong answer because of that). But the PlaceHolderVar problems need to be fixed before that issue can be addressed, so committing this separately seems reasonable.
* Rename some bgworker functions as we've done in master.Robert Haas2013-08-16
| | | | | | | | | Commit 2dee7998f93062e2ae7fcc9048ff170e528d1724 renames these functions in master, for consistency; per discussion, backport just the renaming portion of that commit to 9.3 to keep the branches in sync. Michael Paquier
* Don't allow ALTER MATERIALIZED VIEW ADD UNIQUE.Kevin Grittner2013-08-15
| | | | | | | Was accidentally allowed, but not documented and lacked support for rename or drop once created. Per report from Noah Misch.
* Add tab completion for \dx in psqlMagnus Hagander2013-08-15
|
* Treat timeline IDs as unsigned in replication parserPeter Eisentraut2013-08-14
| | | | | Timeline IDs are unsigned ints everywhere, except the replication parser treated them as signed ints.
* Improve error message when view is not updatablePeter Eisentraut2013-08-14
| | | | | Avoid using the term "updatable" in confusing ways. Suggest a trigger first, before a rule.
* Remove ph_may_need from PlaceHolderInfo, with attendant simplifications.Tom Lane2013-08-14
| | | | | | | | | | | | | | | | | | | | | The planner logic that attempted to make a preliminary estimate of the ph_needed levels for PlaceHolderVars seems to be completely broken by lateral references. Fortunately, the potential join order optimization that this code supported seems to be of relatively little value in practice; so let's just get rid of it rather than trying to fix it. Getting rid of this allows fairly substantial simplifications in placeholder.c, too, so planning in such cases should be a bit faster. Issue noted while pursuing bugs reported by Jeremy Evans and Antonin Houska, though this doesn't in itself fix either of their reported cases. What this does do is prevent an Assert crash in the kind of query illustrated by the added regression test. (I'm not sure that the plan for that query is stable enough across platforms to be usable as a regression test output ... but we'll soon find out from the buildfarm.) Back-patch to 9.3. The problem case can't arise without LATERAL, so no need to touch older branches.
* Remove Assert that matview is not in system schema from REFRESH.Kevin Grittner2013-08-14
| | | | | | | | We don't want to prevent an extension which creates a matview from being installed in pg_catalog. Issue was raised by Hitoshi Harada. Backpatched to 9.3.
* Emit a log message if output is about to be redirected away from stderr.Tom Lane2013-08-13
| | | | | | | | | | | | | | | | | | | We've seen multiple cases of people looking at the postmaster's original stderr output to try to diagnose problems, not realizing/remembering that their logging configuration is set up to send log messages somewhere else. This seems particularly likely to happen in prepackaged distributions, since many packagers patch the code to change the factory-standard logging configuration to something more in line with their platform conventions. In hopes of reducing confusion, emit a LOG message about this at the point in startup where we are about to switch log output away from the original stderr, providing a pointer to where to look instead. This message will appear as the last thing in the original stderr output. (We might later also try to emit such link messages when logging parameters are changed on-the-fly; but that case seems to be both noticeably harder to do nicely, and much less frequently a problem in practice.) Per discussion, back-patch to 9.3 but not further.