aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* Code review for range-types catalog entries.Tom Lane2011-11-16
| | | | | | | Fix assorted infelicities, such as dependency on OIDs that aren't hardwired, as well as outright misdeclaration of daterange_canonical(), which resulted in crashes if you invoked it directly. Add some more regression tests to try to catch similar mistakes in future.
* Don't elide blank lines when accumulating psql command history.Robert Haas2011-11-15
| | | | | | | This can change the meaning of queries, if the blank line happens to occur in the middle of a quoted literal, as per complaint from Tomas Vondra. Back-patch to all supported branches.
* Improve caching in range type I/O functions.Tom Lane2011-11-15
| | | | | Cache the the element type's I/O info across calls, not only the range type's info. In passing, also clean up hash_range a bit more.
* Restructure function-internal caching in the range type code.Tom Lane2011-11-15
| | | | | | | | | | | | | | | | | | | Move the responsibility for caching specialized information about range types into the type cache, so that the catalog lookups only have to occur once per session. Rearrange APIs a bit so that fn_extra caching is actually effective in the GiST support code. (Use of OidFunctionCallN is bad enough for performance in itself, but it also prevents the function from exploiting fn_extra caching.) The range I/O functions are still not very bright about caching repeated lookups, but that seems like material for a separate patch. Also, avoid unnecessary use of memcpy to fetch/store the range type OID and flags, and don't use the full range_deserialize machinery when all we need to see is the flags value. Also fix API error in range_gist_penalty --- it was failing to set *penalty for any case involving an empty range.
* Fix alignment and toasting bugs in range types.Tom Lane2011-11-14
| | | | | | | | | | | | | | | | | | | | | A range type whose element type has 'd' alignment must have 'd' alignment itself, else there is no guarantee that the element value can be used in-place. (Because range_deserialize uses att_align_pointer which forcibly aligns the given pointer, violations of this rule did not lead to SIGBUS but rather to garbage data being extracted, as in one of the added regression test cases.) Also, you can't put a toast pointer inside a range datum, since the referenced value could disappear with the range datum still present. For consistency with the handling of arrays and records, I also forced decompression of in-line-compressed bound values. It would work to store them as-is, but our policy is to avoid situations that might result in double compression. Add assorted regression tests for this, and bump catversion because of fixes to built-in pg_type entries. Also some marginal cleanup of inconsistent/unnecessary error checks.
* Update oidjoins regression test to match git HEAD.Tom Lane2011-11-14
| | | | This is mostly to add some sanity checking for the pg_range catalog.
* Return NULL instead of throwing error when desired bound is not available.Tom Lane2011-11-14
| | | | | | | | Change range_lower and range_upper to return NULL rather than throwing an error when the input range is empty or the relevant bound is infinite. Per discussion, throwing an error seems likely to be unduly hard to work with. Also, this is more consistent with the behavior of the constructors, which treat NULL as meaning an infinite bound.
* Return FALSE instead of throwing error for comparisons with empty ranges.Tom Lane2011-11-14
| | | | | | | | | | | | | | | | Change range_before, range_after, range_adjacent to return false rather than throwing an error when one or both input ranges are empty. The original definition is unnecessarily difficult to use, and also can result in undesirable planner failures since the planner could try to compare an empty range to something else while deriving statistical estimates. (This was, in fact, the cause of repeatable regression test failures on buildfarm member jaguar, as well as intermittent failures elsewhere.) Also tweak rangetypes regression test to not drop all the objects it creates, so that the final state of the regression database contains some rangetype objects for pg_dump testing.
* Fix copyright notices, other minor editing in new range-types code.Tom Lane2011-11-14
| | | | | | | No functional changes in this commit (except I could not resist the temptation to re-word a couple of error messages). This is just manual cleanup after pgindent to make the code look reasonably like other PG code, in preparation for more detailed code review to come.
* Rerun pgindent with updated typedef list.Bruce Momjian2011-11-14
|
* Run pgindent on range type files, per request from Tom.Bruce Momjian2011-11-14
|
* Applied patch by Zoltan to fix copy&paste bug in ecpg's sqlda handling.Michael Meskes2011-11-13
|
* Wakeup WALWriter as needed for asynchronous commit performance.Simon Riggs2011-11-13
| | | | | | | | Previously we waited for wal_writer_delay before flushing WAL. Now we also wake WALWriter as soon as a WAL buffer page has filled. Significant effect observed on performance of asynchronous commits by Robert Haas, attributed to the ability to set hint bits on tuples earlier and so reducing contention caused by clog lookups.
* In plpgsql, allow foreign tables to define row types.Tom Lane2011-11-12
| | | | | | | | | This seems to have been just an oversight in previous foreign-table work. A quick grep didn't turn up any other places where RELKIND_FOREIGN_TABLE was obviously omitted. One change noted by Alexander Soudakov, the other by me. Back-patch to 9.1.
* Add psql expanded auto modePeter Eisentraut2011-11-12
| | | | | | | This adds the "auto" option to the \x command, which switches to the expanded mode when the normal output would be wider than the screen. reviewed by Noah Misch
* Avoid retaining multiple relation locks in RangeVarGetRelid.Robert Haas2011-11-12
| | | | | | | | If it turns out we've locked the wrong OID, release the old lock. In most cases, it's pretty harmless to retain the extra lock, but this seems tidier and avoids using lock table slots unnecessarily. Per discussion with Tom Lane.
* Fix psql's \dd version check for operator families.Robert Haas2011-11-11
| | | | Report and patch by Josh Kupershmidt; comment revisions by me.
* Throw nice error if server is too old to support psql's \ef or \sf command.Tom Lane2011-11-10
| | | | | | | | Previously, you'd get "function pg_catalog.pg_get_functiondef(integer) does not exist", which is at best rather unprofessional-looking. Back-patch to 8.4 where \ef was introduced. Josh Kupershmidt
* Revert removal of trace_userlocks, because userlocks aren't gone.Robert Haas2011-11-10
| | | | | | This reverts commit 0180bd6180511875db046bf8ddcaa633a2952dfd. contrib/userlock is gone, but user-level locking still exists, and is exposed via the pg_advisory* family of functions.
* Avoid platform-dependent infinite loop in pg_dump.Tom Lane2011-11-10
| | | | | | | | | | | If malloc(0) returns NULL, the binary search in findSecLabels() will probably go into an infinite loop when there are no security labels, because NULL-1 is greater than NULL after wraparound. (We've seen this pathology before ... I wonder whether there's a way to detect the class of bugs automatically?) Diagnosis and patch by Steve Singer, cosmetic adjustments by me
* Fix server header file installation with vpath buildsPeter Eisentraut2011-11-10
| | | | | Several server header files would not be installed in vpath builds because they live in the build directory.
* Fix another bug in the redo of COPY batches.Heikki Linnakangas2011-11-10
| | | | | I got alignment wrong in the redo routine. Spotted by redoing the log genereated by copy regression test.
* Only install the extension files for the current Python major versionPeter Eisentraut2011-11-09
|
* Fix bugs in the COPY heap-insert batching patch.Heikki Linnakangas2011-11-09
| | | | | | | | | | Forgot to call RestoreBkpBlocks() in the redo-function, as pointed out by Simon Riggs. In redo of a regular heap insert, it's taken care of in heap_redo(), but this new record type uses the heap2 RM, and heap2_redo() does not take care of that for you. Also, failed to reset the vmbuffer and all_visibile_cleared local variables after switching to a new buffer.
* Clean gettext-files file in clean targetPeter Eisentraut2011-11-09
| | | | | | | It used to be cleaned in maintainer-clean, but that is inconsistent with other cleaning of NLS files in nls-global.mk, and it's also wrong overall, because it's not part of the distribution tarball, which is the base definition of the maintainer-clean target.
* Fix compiler warning.Robert Haas2011-11-09
|
* In COPY, insert tuples to the heap in batches.Heikki Linnakangas2011-11-09
| | | | | | | This greatly reduces the WAL volume, especially when the table is narrow. The overhead of locking the heap page is also reduced. Reduced WAL traffic also makes it scale a lot better, if you run multiple COPY processes at the same time.
* Tweak new regression test case for more portability.Tom Lane2011-11-09
| | | | | Ensure that same index gets selected on 32-bit and 64-bit machines. Per buildfarm results.
* Fix random discrepancies between parallel_schedule and serial_schedule.Tom Lane2011-11-08
| | | | | | | | In particular, my previous patch expected the create_index test to run before the inherit test; but this was only true in the serial schedule. Rearrange this portion of the schedules to be more consistent. Per buildfarm results.
* Wrap appendrel member outputs in PlaceHolderVars in additional cases.Tom Lane2011-11-08
| | | | | | | | | | | | | | | | Add PlaceHolderVar wrappers as needed to make UNION ALL sub-select output expressions appear non-constant and distinct from each other. This makes the world safe for add_child_rel_equivalences to do what it does. Before, it was possible for that function to add identical expressions to different EquivalenceClasses, which logically should imply merging such ECs, which would be wrong; or to improperly add a constant to an EquivalenceClass, drastically changing its behavior. Per report from Teodor Sigaev. The only currently known consequence of this bug is "MergeAppend child's targetlist doesn't match MergeAppend" planner failures in 9.1 and later. I am suspicious that there may be other failure modes that could affect older release branches; but in the absence of any hard evidence, I'll refrain from back-patching further than 9.1.
* Make DatumGetInetP() unpack inet datums with a 1-byte header, and addHeikki Linnakangas2011-11-08
| | | | | | | a new macro, DatumGetInetPP(), that does not. This brings these macros in line with other DatumGet*P() macros. Backpatch to 8.3, where 1-byte header varlenas were introduced.
* Rewrite comment for slightly greater accuracy.Robert Haas2011-11-08
| | | | Per an observation from Thom Brown that the old version contained a typo.
* Make VACUUM avoid waiting for a cleanup lock, where possible.Robert Haas2011-11-07
| | | | | | | | | | | In a regular VACUUM, it's OK to skip pages for which a cleanup lock isn't immediately available; the next VACUUM will deal with them. If we're scanning the entire relation to advance relfrozenxid, we might need to wait, but only if there are tuples on the page that actually require freezing. These changes should greatly reduce the incidence of of vacuum processes getting "stuck". Simon Riggs and Robert Haas
* Fix timestamp range subdiff functions, when using float datetimes.Heikki Linnakangas2011-11-07
|
* On second thought, we'd better just drop these tests altogether.Tom Lane2011-11-06
| | | | | | | | Further experimentation reveals that my previous change didn't fix the issue entirely: these tests would still fail at the spring-forward DST transition. There doesn't seem to be any great value in testing this specific issue for both timestamp and timestamptz, so just lose the latter tests.
* Un-break horology regression test.Tom Lane2011-11-06
| | | | | | Adjust ill-considered timezone-dependent tests added in commit 8a3d33c8e6c681d512f79af4a521ee0c02befcef so that they won't fail on DST transition days. Per all-pink buildfarm.
* Oops, forgot to fix the catversion when I committed the range types patch.Heikki Linnakangas2011-11-06
| | | | | | It was inadvertently changed to 201111111, which is a wrong date. Change it to current date, and remove the comment that was supposed to remind me to fix it before committing.
* Update regression tests for \d+ modificationMagnus Hagander2011-11-05
| | | | Noted by Tom
* Show statistics target for columns in \d+ on a tableMagnus Hagander2011-11-05
|
* Make psql \d on a sequence show the table/column owning itMagnus Hagander2011-11-05
|
* Don't assume that a tuple's header size is unchanged during toasting.Tom Lane2011-11-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This assumption can be wrong when the toaster is passed a raw on-disk tuple, because the tuple might pre-date an ALTER TABLE ADD COLUMN operation that added columns without rewriting the table. In such a case the tuple's natts value is smaller than what we expect from the tuple descriptor, and so its t_hoff value could be smaller too. In fact, the tuple might not have a null bitmap at all, and yet our current opinion of it is that it contains some trailing nulls. In such a situation, toast_insert_or_update did the wrong thing, because to save a few lines of code it would use the old t_hoff value as the offset where heap_fill_tuple should start filling data. This did not leave enough room for the new nulls bitmap, with the result that the first few bytes of data could be overwritten with null flag bits, as in a recent report from Hubert Depesz Lubaczewski. The particular case reported requires ALTER TABLE ADD COLUMN followed by CREATE TABLE AS SELECT * FROM ... or INSERT ... SELECT * FROM ..., and further requires that there be some out-of-line toasted fields in one of the tuples to be copied; else we'll not reach the troublesome code. The problem can only manifest in this form in 8.4 and later, because before commit a77eaa6a95009a3441e0d475d1980259d45da072, CREATE TABLE AS or INSERT/SELECT wouldn't result in raw disk tuples getting passed directly to heap_insert --- there would always have been at least a junkfilter in between, and that would reconstitute the tuple header with an up-to-date t_natts and hence t_hoff. But I'm backpatching the tuptoaster change all the way anyway, because I'm not convinced there are no older code paths that present a similar risk.
* Add missing space in commentMagnus Hagander2011-11-04
|
* Move user functions related to WAL into xlogfuncs.cSimon Riggs2011-11-04
|
* Unbreak isolationtester on Win32Alvaro Herrera2011-11-04
| | | | | | | I broke it in a previous commit because I neglected to install the necessary incantations to have getopt() work on Windows. Per red blots in buildfarm.
* Improve comments for TSLexeme data structure.Tom Lane2011-11-03
| | | | Mostly, clean up long-ago pgindent damage.
* Fix inline_set_returning_function() to allow multiple OUT parameters.Tom Lane2011-11-03
| | | | | | | | inline_set_returning_function failed to distinguish functions returning generic RECORD (which require a column list in the RTE, as well as run-time type checking) from those with multiple OUT parameters (which do not). This prevented inlining from happening. Per complaint from Jay Levitt. Back-patch to 8.4 where this capability was introduced.
* Implement a dry-run mode for isolationtesterAlvaro Herrera2011-11-03
| | | | | | | | This mode prints out the permutations that would be run by the given spec file, in the same format used by the permutation lines in spec files. This helps in building new spec files. Author: Alexander Shulgin, with some tweaks by me
* Do not treat a superuser as a member of every role for HBA purposes.Andrew Dunstan2011-11-03
| | | | | | This makes it possible to use reject lines with group roles. Andrew Dunstan, reviewd by Robert Haas.
* Properly close replication connection in pg_receivexlogMagnus Hagander2011-11-03
|
* Pre-pad WAL files when streaming transaction logMagnus Hagander2011-11-03
| | | | | | | | | | | | | | Instead of filling files as they appear, pre-pad the WAL files received when streaming xlog the same way that the server does. Data is streamed into a .partial file which is then renamed()d into palce when it's complete, but it will always be 16MB. This also means that the starting position for pg_receivexlog is now simply right after the last complete segment, and we never need to deal with partial segments there. Patch by me, review by Fujii Masao