summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2014-04-10Fix bugs in GIN "fast scan" with partial match.Heikki Linnakangas
There were a couple of bugs here. First, if the fuzzy limit was exceeded, the loop in entryGetItem might drop out too soon if a whole block needs to be skipped because it's < advancePast ("continue" in a while-loop checks the loop condition too). Secondly, the loop checked when stepping to a new page that there is at least one offset on the page < advancePast, but we cannot rely on that on subsequent calls of entryGetItem, because advancePast might change in between. That caused the skipping loop to read bogus items in the TbmIterateResult's offset array. First item and fix by Alexander Korotkov, second bug pointed out by Fabrízio de Royes Mello, by a small variation of Alexander's test query.
2014-04-10The new pointer_to_struct test needs a special command line parameter to ecpg.Michael Meskes
Hopefully this will fix the buildfarm failures on Windows.
2014-04-10C comment: track_activity_query_size doesn't support memory unitsBruce Momjian
And explain why. Per report from Pavel Stehule
2014-04-10Fix typo in comment.Heikki Linnakangas
Tomonari Katsumata
2014-04-10Fix a few more misc typos in comments.Heikki Linnakangas
2014-04-09Fix misc typos in comments.Heikki Linnakangas
2014-04-09Add missing include.Robert Haas
This is more cleanup from commit 11a65eed1637a05b03e174700799b024e104bfb4. Amit Kapila
2014-04-09Several fixes to array handling in ecpg.Michael Meskes
Patches by Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
2014-04-08Fix silly oversight in patch to remove dsm state file.Robert Haas
I'm not sure if this is what's causing the Windows buildfarm members to get unhappy, but I don't think it can be helping anything...
2014-04-08Add an in-core GiST index opclass for inet/cidr types.Tom Lane
This operator class can accelerate subnet/supernet tests as well as btree-equivalent ordered comparisons. It also handles a new network operator inet && inet (overlaps, a/k/a "is supernet or subnet of"), which is expected to be useful in exclusion constraints. Ideally this opclass would be the default for GiST with inet/cidr data, but we can't mark it that way until we figure out how to do a more or less graceful transition from the current situation, in which the really-completely-bogus inet/cidr opclasses in contrib/btree_gist are marked as default. Having the opclass in core and not default is better than not having it at all, though. While at it, add new documentation sections to allow us to officially document GiST/GIN/SP-GiST opclasses, something there was never a clear place to do before. I filled these in with some simple tables listing the existing opclasses and the operators they support, but there's certainly scope to put more information there. Emre Hasegeli, reviewed by Andreas Karlsson, further hacking by me
2014-04-08Get rid of the dynamic shared memory state file.Robert Haas
Instead of storing the ID of the dynamic shared memory control segment in a file within the data directory, store it in the main control segment. This avoids a number of nasty corner cases, most seriously that doing an online backup and then using it on the same machine (e.g. to fire up a standby) would result in the standby clobbering all of the master's dynamic shared memory segments. Per complaints from Heikki Linnakangas, Fujii Masao, and Tom Lane.
2014-04-08Add new to_reg* functions for error-free OID lookups.Robert Haas
These functions won't throw an error if the object doesn't exist, or if (for functions and operators) there's more than one matching object. Yugo Nagata and Nozomi Anzai, reviewed by Amit Khandekar, Marti Raudsepp, Amit Kapila, and me.
2014-04-08Fix hot standby bug with GiST scans.Heikki Linnakangas
Don't reset the rightlink of a page when replaying a page update record. This was a leftover from pre-hot standby days, when it was not possible to have scans concurrent with WAL replay. Resetting the right-link was not necessary back then either, but it was done for the sake of tidiness. But with hot standby, it's wrong, because a concurrent scan might still need it. Backpatch all versions with hot standby, 9.0 and above.
2014-04-07Zero padding byte at end of GIN posting list.Heikki Linnakangas
This isn't strictly necessary, but helps debugging.
2014-04-07Remove 'make clean' support for ipc_test.Robert Haas
I missed this in the previous commit; Tom Lane spotted my error.
2014-04-07Assert that strong-lock count is >0 everywhere it's decremented.Robert Haas
The one existing assertion of this type has tripped a few times in the buildfarm lately, but it's not clear whether the problem is really originating there or whether it's leftovers from a trip through one of the other two paths that lack a matching assertion. So add one. Since the same bug(s) most likely exist(s) in the back-branches also, back-patch to 9.2, where the fast-path lock mechanism was added.
2014-04-07Remove ipc_test.Robert Haas
This doesn't seem to be useful any more, and it's not really worth the effort to keep updating it every time relevant dependencies or calling signatures in the shared memory or semaphore code change.
2014-04-07Fix WAL replay bug in the new GIN incomplete-split code.Heikki Linnakangas
Forgot to set the incomplete-split flag on the left page half, in redo of a page split. Spotted this by comparing the page contents on master and standby, after inserting/applying each WAL record.
2014-04-06Extra warnings and errors for PL/pgSQLSimon Riggs
Infrastructure to allow plpgsql.extra_warnings plpgsql.extra_errors Initial extra checks only for shadowed_variables Marko Tiikkaja and Petr Jelinek Reviewed by Simon Riggs and Pavel Stěhule
2014-04-06Isolation test files for ALTER TABLE patchSimon Riggs
2014-04-06Reduce lock levels of some ALTER TABLE cmdsSimon Riggs
VALIDATE CONSTRAINT CLUSTER ON SET WITHOUT CLUSTER ALTER COLUMN SET STATISTICS ALTER COLUMN SET () ALTER COLUMN RESET () All other sub-commands use AccessExclusiveLock Simon Riggs and Noah Misch Reviews by Robert Haas and Andres Freund
2014-04-05Block signals earlier during postmaster startup.Tom Lane
Formerly, we set up the postmaster's signal handling only when we were about to start launching subprocesses. This is a bad idea though, as it means that for example a SIGINT arriving before that will kill the postmaster instantly, perhaps leaving lockfiles, socket files, shared memory, etc laying about. We'd rather that such a signal caused orderly postmaster termination including releasing of those resources. A simple fix is to move the PostmasterMain stanza that initializes signal handling to an earlier point, before we've created any such resources. Then, an early-arriving signal will be blocked until we're ready to deal with it in the usual way. (The only part that really needs to be moved up is blocking of signals, but it seems best to keep the signal handler installation calls together with that; for one thing this ensures the kernel won't drop any signals we wished to get. The handlers won't get invoked in any case until we unblock signals in ServerLoop.) Per a report from MauMau. He proposed changing the way "pg_ctl stop" works to deal with this, but that'd just be masking one symptom not fixing the core issue. It's been like this since forever, so back-patch to all supported branches.
2014-04-05Fix another palloc in critical section.Heikki Linnakangas
Also add a regression test for a GIN index with enough items with the same key, so that a GIN posting tree gets created. Apparently none of the existing GIN tests were large enough for that. This code is new, no backpatching required.
2014-04-05Fix processing of PGC_BACKEND GUC parameters on Windows.Tom Lane
EXEC_BACKEND builds (i.e., Windows) failed to absorb values of PGC_BACKEND parameters if they'd been changed post-startup via the config file. This for example prevented log_connections from working if it were turned on post-startup. The mechanism for handling this case has always been a bit of a kluge, and it wasn't revisited when we implemented EXEC_BACKEND. While in a normal forking environment new backends will inherit the postmaster's value of such settings, EXEC_BACKEND backends have to read the settings from the CONFIG_EXEC_PARAMS file, and they were mistakenly rejecting them. So this case has always been broken in the Windows port; so back-patch to all supported branches. Amit Kapila
2014-04-05ecpg/ecpglib must build the src/port files it uses with -DFRONTEND.Tom Lane
Remarkably, this hasn't been noticed before, though it surely should have been happening since around the fall of the Byzantine empire. Commit 438b529604 changed path.c to depend on FRONTEND, and that exposed the omission, per buildfarm reports. I'm suspicious that some other subdirectories are missing this too, but this one change is enough to make ecpg tests pass for me.
2014-04-04Fix tablespace creation WAL replay to work on Windows.Tom Lane
The code segment that removes the old symlink (if present) wasn't clued into the fact that on Windows, symlinks are junction points which have to be removed with rmdir(). Backpatch to 9.0, where the failing code was introduced. MauMau, reviewed by Muhammad Asif Naeem and Amit Kapila
2014-04-04Allow "-C variable" and "--describe-config" even to root users.Tom Lane
There's no really compelling reason to refuse to do these read-only, non-server-starting options as root, and there's at least one good reason to allow -C: pg_ctl uses -C to find out the true data directory location when pointed at a config-only directory. On Windows, this is done before dropping administrator privileges, which means that pg_ctl fails for administrators if and only if a config-only layout is used. Since the root-privilege check is done so early in startup, it's a bit awkward to check for these switches. Make the somewhat arbitrary decision that we'll only skip the root check if -C is the first switch. This is not just to make the code a bit simpler: it also guarantees that we can't misinterpret a --boot mode switch. (While AuxiliaryProcessMain doesn't currently recognize any such switch, it might have one in the future.) This is no particular problem for pg_ctl, and since the whole behavior is undocumented anyhow, it's not a documentation issue either. (--describe-config only works as the first switch anyway, so this is no restriction for that case either.) Back-patch to 9.2 where pg_ctl first began to use -C. MauMau, heavily edited by me
2014-04-04Preserve errno across free().Tom Lane
Dept. of second thoughts: free() isn't guaranteed not to change errno. Make sure we report the right error if getcwd() fails.
2014-04-04Make sure -D is an absolute path when starting server on Windows.Tom Lane
This is needed because Windows services may get started with a different current directory than where pg_ctl is executed. We want relative -D paths to be interpreted relative to pg_ctl's CWD, similarly to what happens on other platforms. In support of this, move the backend's make_absolute_path() function into src/port/path.c (where it probably should have been long since) and get rid of the rather inferior version in pg_regress. Kumar Rajeev Rastogi, reviewed by MauMau
2014-04-04Fix bogus time printout in walreceiver's debug log messages.Tom Lane
The displayed sendtime and receipttime were always exactly equal, because somebody forgot that timestamptz_to_str returns a static buffer (thereby simplifying life for most callers, at the cost of complicating it for those who need two results concurrently). Apply the same pstrdup solution used by the other call sites with this issue. Back-patch to 9.2 where the faulty code was introduced. Per bug #9849 from Haruka Takatsuka, though this is not exactly his patch. Possibly we should change timestamptz_to_str's API, but I wouldn't want to do so in the back branches.
2014-04-04Fix some compiler warnings that clang emits with -pedantic.Robert Haas
Andres Freund
2014-04-04Move multixid allocation out of critical section.Heikki Linnakangas
It can fail if you run out of memory. This call was added in 9.3, so backpatch to 9.3 only.
2014-04-04In checkpoint, move the check for in-progress xacts out of critical section.Heikki Linnakangas
GetVirtualXIDsDelayingChkpt calls palloc, which isn't safe in a critical section. I thought I covered this case with the exemption for the checkpointer, but CreateCheckPoint is also called from the startup process.
2014-04-04Add an Assertion that you don't palloc within a critical section.Heikki Linnakangas
This caught a bunch of cases doing that already, which I just fixed in previous commit. This is the assertion itself. Per Tom Lane's idea.
2014-04-04Avoid allocations in critical sections.Heikki Linnakangas
If a palloc in a critical section fails, it becomes a PANIC.
2014-04-03Fix non-equivalence of VARIADIC and non-VARIADIC function call formats.Tom Lane
For variadic functions (other than VARIADIC ANY), the syntaxes foo(x,y,...) and foo(VARIADIC ARRAY[x,y,...]) should be considered equivalent, since the former is converted to the latter at parse time. They have indeed been equivalent, in all releases before 9.3. However, commit 75b39e790 made an ill-considered decision to record which syntax had been used in FuncExpr nodes, and then to make equal() test that in checking node equality --- which caused the syntaxes to not be seen as equivalent by the planner. This is the underlying cause of bug #9817 from Dmitry Ryabov. It might seem that a quick fix would be to make equal() disregard FuncExpr.funcvariadic, but the same commit made that untenable, because the field actually *is* semantically significant for some VARIADIC ANY functions. This patch instead adopts the approach of redefining funcvariadic (and aggvariadic, in HEAD) as meaning that the last argument is a variadic array, whether it got that way by parser intervention or was supplied explicitly by the user. Therefore the value will always be true for non-ANY variadic functions, restoring the principle of equivalence. (However, the planner will continue to consider use of VARIADIC as a meaningful difference for VARIADIC ANY functions, even though some such functions might disregard it.) In HEAD, this change lets us simplify the decompilation logic in ruleutils.c, since the funcvariadic/aggvariadic flag tells directly whether to print VARIADIC. However, in 9.3 we have to continue to cope with existing stored rules/views that might contain the previous definition. Fortunately, this just means no change in ruleutils.c, since its existing behavior effectively ignores funcvariadic for all cases other than VARIADIC ANY functions. In HEAD, bump catversion to reflect the fact that FuncExpr.funcvariadic changed meanings; this is sort of pro forma, since I don't believe any built-in views are affected. Unfortunately, this patch doesn't magically fix everything for affected 9.3 users. After installing 9.3.5, they might need to recreate their rules/views/indexes containing variadic function calls in order to get everything consistent with the new definition. As in the cited bug, the symptom of a problem would be failure to use a nominally matching index that has a variadic function call in its definition. We'll need to mention this in the 9.3.5 release notes.
2014-04-03Code review for commit d26888bc4d1e539a82f21382b0000fe5bbf889d9.Tom Lane
Mostly, copy-edit the comments; but also fix it to not reject domains over arrays.
2014-04-03Avoid palloc in critical section in GiST WAL-logging.Heikki Linnakangas
Memory allocation can fail if you run out of memory, and inside a critical section that will lead to a PANIC. Use conservatively-sized arrays in stack instead. There was previously no explicit limit on the number of pages a GiST split can produce, it was only limited by the number of LWLocks that can be held simultaneously (100 at the moment). This patch adds an explicit limit of 75 pages. That should be plenty, a typical split shouldn't produce more than 2-3 page halves. The bug has been there forever, but only backpatch down to 9.1. The code was changed significantly in 9.1, and it doesn't seem worth the risk or trouble to adapt this for 9.0 and 8.4.
2014-04-02Fix assorted issues in client host name lookup.Tom Lane
The code for matching clients to pg_hba.conf lines that specify host names (instead of IP address ranges) failed to complain if reverse DNS lookup failed; instead it silently didn't match, so that you might end up getting a surprising "no pg_hba.conf entry for ..." error, as seen in bug #9518 from Mike Blackwell. Since we don't want to make this a fatal error in situations where pg_hba.conf contains a mixture of host names and IP addresses (clients matching one of the numeric entries should not have to have rDNS data), remember the lookup failure and mention it as DETAIL if we get to "no pg_hba.conf entry". Apply the same approach to forward-DNS lookup failures, too, rather than treating them as immediate hard errors. Along the way, fix a couple of bugs that prevented us from detecting an rDNS lookup error reliably, and make sure that we make only one rDNS lookup attempt; formerly, if the lookup attempt failed, the code would try again for each host name entry in pg_hba.conf. Since more or less the whole point of this design is to ensure there's only one lookup attempt not one per entry, the latter point represents a performance bug that seems sufficient justification for back-patching. Also, adjust src/port/getaddrinfo.c so that it plays as well as it can with this code. Which is not all that well, since it does not have actual support for rDNS lookup, but at least it should return the expected (and required by spec) error codes so that the main code correctly perceives the lack of functionality as a lookup failure. It's unlikely that PG is still being used in production on any machines that require our getaddrinfo.c, so I'm not excited about working harder than this. To keep the code in the various branches similar, this includes back-patching commits c424d0d1052cb4053c8712ac44123f9b9a9aa3f2 and 1997f34db4687e671690ed054c8f30bb501b1168 into 9.2 and earlier. Back-patch to 9.1 where the facility for hostnames in pg_hba.conf was introduced.
2014-04-02De-anonymize the union in JsonbValue.Tom Lane
Needed for strict C89 compliance.
2014-04-01Fix bugs in manipulation of PgBackendStatus.st_clienthostname.Tom Lane
Initialization of this field was not being done according to the st_changecount protocol (it has to be done within the changecount increment range, not outside). And the test to see if the value should be reported as null was wrong. Noted while perusing uses of Port.remote_hostname. This was wrong from the introduction of this code (commit 4a25bc145), so back-patch to 9.1.
2014-04-01Fix bug in the new GIN incomplete-split code.Heikki Linnakangas
Inserting a downlink to an internal page clears the incomplete-split flag of the child's left sibling, so the left sibling's LSN also needs to be updated and it needs to be marked dirty. The codepath for an insertion got this right, but the case where the internal node is split because of inserting the new downlink missed that.
2014-04-01Remove dead check for backup block, replace with Assert.Heikki Linnakangas
We don't use backup blocks with GIN vacuum records anymore, the page is always recreated from scratch.
2014-04-01Fix bug in the new B-tree incomplete-split code.Heikki Linnakangas
Inserting a downlink to an internal page clears the incomplete-split flag of the child's left sibling, so the left sibling's LSN also needs to be updated.
2014-04-01Move SizeOfHeapNewCid next to xl_heap_new_cid struct.Heikki Linnakangas
They belong together, but the xl_heap_rewrite_mapping struct was wedged in between.
2014-03-31Mark FastPathStrongRelationLocks volatile.Robert Haas
Otherwise, the compiler might decide to move modifications to data within this structure outside the enclosing SpinLockAcquire / SpinLockRelease pair, leading to shared memory corruption. This may or may not explain a recent lmgr-related buildfarm failure on prairiedog, but it needs to be fixed either way.
2014-03-31Count buffers dirtied due to hints in pgBufferUsage.shared_blks_dirtied.Robert Haas
Previously, such buffers weren't counted, with the possible result that EXPLAIN (BUFFERS) and pg_stat_statements would understate the true number of blocks dirtied by an SQL statement. Back-patch to 9.2, where this counter was introduced. Amit Kapila
2014-03-31Fix thinko in logical decoding code.Robert Haas
Andres Freund
2014-03-31Rewrite the way GIN posting lists are packed on a page, to reduce WAL volume.Heikki Linnakangas
Inserting (in retail) into the new 9.4 format GIN posting tree created much larger WAL records than in 9.3. The previous strategy to WAL logging was basically to log the whole page on each change, with the exception of completely unmodified segments up to the first modified one. That was not too bad when appending to the end of the page, as only the last segment had to be WAL-logged, but per Fujii Masao's testing, even that produced 2x the WAL volume that 9.3 did. The new strategy is to keep track of changes to the posting lists in a more fine-grained fashion, and also make the repacking" code smarter to avoid decoding and re-encoding segments unnecessarily.
2014-03-31Rename GinLogicValue to GinTernaryValue.Heikki Linnakangas
It's more descriptive. Also, get rid of the enum, and use #defines instead, per Greg Stark's suggestion.