aboutsummaryrefslogtreecommitdiff
path: root/src/backend
Commit message (Collapse)AuthorAge
* Remove the 'slow' path for btree index build, which built the btreeTom Lane2006-04-01
| | | | | | | | | | | incrementally by successive inserts rather than by sorting the data. We were only using the slow path during bootstrap, apparently because when first written it failed during bootstrap --- but it works fine now AFAICT. Removing it saves a hundred or so lines of code and produces noticeably (~10%) smaller initial states of the system catalog indexes. While that won't make much difference for heavily-modified catalogs, for the more static ones there may be a useful long-term performance improvement.
* Clean up WAL/buffer interactions as per my recent proposal. Get rid of theTom Lane2006-03-31
| | | | | | | | | | | | | | | | misleadingly-named WriteBuffer routine, and instead require routines that change buffer pages to call MarkBufferDirty (which does exactly what it says). We also require that they do so before calling XLogInsert; this takes care of the synchronization requirement documented in SyncOneBuffer. Note that because bufmgr takes the buffer content lock (in shared mode) while writing out any buffer, it doesn't matter whether MarkBufferDirty is executed before the buffer content change is complete, so long as the content change is completed before releasing exclusive lock on the buffer. So it's OK to set the dirtybit before we fill in the LSN. This eliminates the former kluge of needing to set the dirtybit in LockBuffer. Aside from making the code more transparent, we can also add some new debugging assertions, in particular that the caller of MarkBufferDirty must hold the buffer content lock, not merely a pin.
* Improve gist XLOG code to follow the coding rules needed to preventTom Lane2006-03-30
| | | | | | | torn-page problems. This introduces some issues of its own, mainly that there are now some critical sections of unreasonably broad scope, but it's a step forward anyway. Further cleanup will require some code refactoring that I'd prefer to get Oleg and Teodor involved in.
* Suppress attempts to report dropped tables to the stats collector from aTom Lane2006-03-30
| | | | | | | | startup or recovery process. Since such a process isn't a real backend, pgstat.c gets confused. This accounts for recent reports of strange "invalid server process ID -1" log messages during crash recovery. There isn't any point in attempting to make the report, since we'll discard stats in such scenarios anyhow.
* Clean up and document the API for XLogOpenRelation and XLogReadBuffer.Tom Lane2006-03-29
| | | | | | | | This commit doesn't make much functional change, but it does eliminate some duplicated code --- for instance, PageIsNew tests are now done inside XLogReadBuffer rather than by each caller. The GIST xlog code still needs a lot of love, but I'll worry about that separately.
* TablespaceCreateDbspace should function normally even on platforms that do notTom Lane2006-03-29
| | | | | | have symlinks (ie, Windows). Although it'll never be called on to do anything useful during normal operation on such a platform, it's still needed to re-create dropped directories during WAL replay.
* Disable full_page_writes, because turning it off risks causing crash-recoveryTom Lane2006-03-28
| | | | | | | | | | failures even when the hardware and OS did nothing wrong. Per recent analysis of a problem report from Alex Bahdushka. For the moment I've just diked out the test of the parameter, rather than removing the GUC infrastructure and documentation, in case we conclude that there's something salvageable there. There seems no chance of it being resurrected in the 8.1 branch though.
* Repair longstanding error in btree xlog replay: XLogReadBuffer should beTom Lane2006-03-28
| | | | | | | | | | passed extend = true whenever we are reading a page we intend to reinitialize completely, even if we think the page "should exist". This is because it might indeed not exist, if the relation got truncated sometime after the current xlog record was made and before the crash we're trying to recover from. These two thinkos appear to explain both of the old bug reports discussed here: http://archives.postgresql.org/pgsql-hackers/2005-05/msg01369.php
* Comments in IndexBuildHeapScan describe the indexing of recently-deadTom Lane2006-03-24
| | | | | | | | | | tuples as needed "to keep VACUUM from complaining", but actually there is a more compelling reason to do it: failure to do so violates MVCC semantics. This is because a pre-existing serializable transaction might try to use the index after we finish (re)building it, and it might fail to find tuples it should be able to see. We got this mostly right, but not in the case of partial indexes: the code mistakenly discarded recently-dead tuples for partial indexes. Fix that, and adjust the comments.
* Arrange to emit a description of the current XLOG record as error contextTom Lane2006-03-24
| | | | | | | | | when an error occurs during xlog replay. Also, replace the former risky 'write into a fixed-size buffer with no overflow detection' API for XLOG record description routines; use an expansible StringInfo instead. (The latter accounts for most of the patch bulk.) Qingqing Zhou
* Add error location info to ResTarget parse nodes. Allows error cursor to be ↵Tom Lane2006-03-23
| | | | | | supplied for various mistakes involving INSERT and UPDATE target columns.
* Minor refactoring: initialize_SSL() only returns 0, so it should returnNeil Conway2006-03-21
| | | | "void" rather than "int".
* Fix a few places that were checking for the return value of palloc() to beNeil Conway2006-03-19
| | | | | non-NULL: palloc() ereports on OOM, so we can safely assume it returns a valid pointer.
* The call to DNSServiceRegistrationCreate in postmaster.c does incorrectNeil Conway2006-03-18
| | | | | | | | | byte-swapping on the port number which causes the call to fail on Intel Macs. This patch uses htons() instead of htonl() and fixes this bug. Ashley Clark
* Fix bug introduced into mergejoin logic by performance improvement patch ofTom Lane2006-03-17
| | | | | | | | | | | | | | 2005-05-13. When we find that a new inner tuple can't possibly match any outer tuple (because it contains a NULL), we can't immediately skip the tuple when we are in NEXTINNER state. Doing so can lead to emitting multiple copies of the tuple in FillInner mode, because we may rescan the tuple after returning to a previous marked tuple. Instead, proceed to NEXTOUTER state the same as we used to do. After we've found that there's no need to return to the marked position, we can go to SKIPINNER_ADVANCE state instead of SKIP_TEST when the inner tuple is unmatchable; this preserves the performance improvement. Per bug report from Bruce. I also made a couple of cosmetic code rearrangements and added a regression test for the problem.
* Fix invalid use of #if within a macro, per Laurenz Albe. Also try toTom Lane2006-03-16
| | | | | make the LDAP code's error messages look like they were written by someone who had heard of our style guidelines.
* Clean up representation of function RTEs for functions returning RECORD.Tom Lane2006-03-16
| | | | | | | | | | | | | | | | The original coding stored the raw parser output (ColumnDef and TypeName nodes) which was ugly, bulky, and wrong because it failed to create any dependency on the referenced datatype --- and in fact would not track type renamings and suchlike. Instead store a list of column type OIDs in the RTE. Also fix up general failure of recordDependencyOnExpr to do anything sane about recording dependencies on datatypes. While there are many cases where there will be an indirect dependency (eg if an operator returns a datatype, the dependency on the operator is enough), we do have to record the datatype as a separate dependency in examples like CoerceToDomain. initdb forced because of change of stored rules.
* It seems the YYLLOC_DEFAULT macro recommended by the Bison 1.875 manualTom Lane2006-03-14
| | | | just doesn't work with Bison 2.0 ... fix it ...
* Improve parser so that we can show an error cursor position for errorsTom Lane2006-03-14
| | | | | | | | | | | during parse analysis, not only errors detected in the flex/bison stages. This is per my earlier proposal. This commit includes all the basic infrastructure, but locations are only tracked and reported for errors involving column references, function calls, and operators. More could be done later but this seems like a good set to start with. I've also moved the ReportSyntaxErrorPosition logic out of psql and into libpq, which should make it available to more people --- even within psql this is an improvement because warnings weren't handled by ReportSyntaxErrorPosition.
* Remove copyright notices from Jan (per author approval), and those filesBruce Momjian2006-03-11
| | | | derived from Jan's.
* Add CVS tag lines to files that were lacking them.Bruce Momjian2006-03-11
|
* Remove a few places that attempted to define INT_MAX, SCHAR_MAX, andNeil Conway2006-03-11
| | | | | | similar constants if they were not previously defined. All these constants must be defined by limits.h according to C89, so we can safely assume they are present.
* Recent changes in memory management in tuplesort.c had a problem: theTom Lane2006-03-10
| | | | | | | | | | | | case where we run low on array slots before we run low on memory is much more probable than I had thought, and so it's important to treat each tape fairly in that case. To fix this, track per-tape slot allocations just like we track per-tape space allocation. Also, in the FINALMERGE code path avoid scanning all the input tapes when we really only need to read from one. This should fix poor behavior with very large work_mem as exhibited by Stefan Kaltenbrunner. I didn't do anything about putting an upper bound on the number of tapes, but maybe we should still consider that.
* Add a CHECK_FOR_INTERRUPTS() in _bt_buildadd(). This fixes problemTom Lane2006-03-10
| | | | | with not responding to query cancel during the last stage of btree index creation.
* Implement 4 new aggregate functions from SQL2003. Specifically: var_pop(),Neil Conway2006-03-10
| | | | | | | | | | | | | var_samp(), stddev_pop(), and stddev_samp(). var_samp() and stddev_samp() are just renamings of the historical Postgres aggregates variance() and stddev() -- the latter names have been kept for backward compatibility. This patch includes updates for the documentation and regression tests. The catversion has been bumped. NB: SQL2003 requires that DISTINCT not be specified for any of these aggregates. Per discussion on -patches, I have NOT implemented this restriction: if the user asks for stddev(DISTINCT x), presumably they know what they are doing.
* Add a CHECK_FOR_INTERRUPTS() to the loop in ExecMakeTableFunctionResult.Tom Lane2006-03-10
| | | | Otherwise you can't cancel queries like select ... from generate_series(1,1000000).
* Tweak trace_sort code to show the merge order (number of active inputTom Lane2006-03-08
| | | | | tapes) for each merge step. This will give us some idea of how effective the merge distribution algorithm is.
* Further examination of ltsReleaseBlock usage shows that it's got aTom Lane2006-03-07
| | | | | | | | | | | | | | | | | performance issue during regular merge passes not only the 'final merge' case. The original design contemplated that there would never be more than about one free block per 'tape', hence no need for an efficient method of keeping the free blocks sorted. But given the later addition of merge preread behavior in tuplesort.c, there is likely to be about work_mem worth of free blocks, which is not so small ... and for that matter the number of tapes isn't necessarily small anymore either. So we'd better get rid of the assumption entirely. Instead, I'm assuming that the usage pattern will involve alternation between merge preread and writing of a new run. This makes it reasonable to just add blocks to the list without sorting during successive ltsReleaseBlock calls, and then do a qsort() when we start getting ltsGetFreeBlock() calls. Experimentation seems to confirm that there aren't many qsort calls relative to the number of ltsReleaseBlock/ltsGetFreeBlock calls.
* Repair old performance bug in tuplesort.c/logtape.c. In the case whereTom Lane2006-03-07
| | | | | | | | we are doing the final merge pass on-the-fly, and not writing the data back onto a 'tape', the number of free blocks in the tape set will become large, leading to a lot of time wasted in ltsReleaseBlock(). There is really no need to track the free blocks anymore in this state, so add a simple shutoff switch. Per report from Stefan Kaltenbrunner.
* Turn off zero_damaged_pages in the right place (ie, in the autovacTom Lane2006-03-07
| | | | | process not in the postmaster) and with the right GucSource (needs to be a nontransactional source since we've not started an xact yet).
* Use SetConfigOption() to turn off "zero_damaged_pages" in autovacuum.Bruce Momjian2006-03-07
|
* Properly set "escape_string_warning" to default to true.Bruce Momjian2006-03-07
|
* Make all our flex and bison files use %option prefix or %name-prefixTom Lane2006-03-07
| | | | | | (respectively) to rename yylex and related symbols. Some were doing it this way already, while others used not-too-reliable sed hacks in the Makefiles. It's all nice and consistent now.
* Remove the stub support we had for UNION JOIN; per discussion, this isTom Lane2006-03-07
| | | | | | not likely ever to be implemented seeing it's been removed from SQL2003. This allows getting rid of the 'filter' version of yylex() that we had in parser.c, which should save at least a few microseconds in parsing.
* Default to ON for 8.2, as announced in the release notes:Bruce Momjian2006-03-06
| | | | escape_string_warning = on
* Attached is the new patch. To summarize:Bruce Momjian2006-03-06
| | | | | | | | | | | | | | | | | | | | | | | | | | - new function justify_interval(interval) - modified function justify_hours(interval) - modified function justify_days(interval) These functions are defined to meet the requirements as discussed in this thread. Specifically: - justify_hours makes certain the sign bit on the hours matches the sign bit on the days. It only checks the sign bit on the days, and not the months, when determining if the hours should be positive or negative. After the call, -24 < hours < 24. - justify_days makes certain the sign bit on the days matches the sign bit on the months. It's behavior does not depend on the hours, nor does it modify the hours. After the call, -30 < days < 30. - justify_interval makes sure the sign bits on all three fields months, days, and hours are all the same. After the call, -24 < hours < 24 AND -30 < days < 30. Mark Dilger
* Enable standard_conforming_strings to be turned on.Bruce Momjian2006-03-06
| | | | Kevin Grittner
* This patch adds native LDAP auth, for those platforms that don't haveBruce Momjian2006-03-06
| | | | | | | PAM (such as Win32, but also unixen without PAM). On Unix, uses OpenLDAP. On win32, uses the builin WinLDAP library. Magnus Hagander
* Prevent autovacuum from zeroing damaged pages.Bruce Momjian2006-03-06
|
* Per recent discussion on -hackers, we should sometimes reorder theNeil Conway2006-03-05
| | | | | | | | | | columns of the grouping clause to avoid redundant sorts. The optimizer is not currently capable of doing this, so this patch implements a simple hack in the analysis phase (transformGroupClause): if any subset of the GROUP BY clause matches a prefix of the ORDER BY list, that prefix is moved to the front of the GROUP BY clause. This shouldn't change the semantics of the query, and allows a redundant sort to be avoided for queries like "GROUP BY a, b ORDER BY b".
* Update copyright for 2006. Update scripts.Bruce Momjian2006-03-05
|
* Support include directives in postgresql.conf.Tom Lane2006-03-04
| | | | Patch by Joachim Wieland, somewhat reworked for clarity and portability.
* Declare the arguments of AllocateFile() as const char *, not char *.Tom Lane2006-03-04
| | | | This is consistent with the standard definition of fopen().
* Incorporate a couple of recent tuplesort.c improvements into tuplestore.c.Tom Lane2006-03-04
| | | | | | In particular, ensure that enlargement of the memtuples[] array doesn't fall foul of MaxAllocSize when work_mem is very large, and don't bother enlarging it if that would force an immediate switch into 'tape' mode anyway.
* Prevent lazy_space_alloc from making requests that exceed MaxAllocSize,Tom Lane2006-03-04
| | | | per report from Stefan Kaltenbrunner.
* Prevent sorting from requesting a SortTuple array that exceeds MaxAllocSize;Tom Lane2006-03-04
| | | | | | | we'll go over to disk-based sort if we reach that limit. This fixes Stefan Kaltenbrunner's observation that sorting can suffer an 'invalid memory alloc request size' failure when sort_mem is set large enough. It's unfortunately not so easy to fix in 8.1 ...
* Tighten up SJIS byte sequence check. Now we reject invalid SJIS byteTatsuo Ishii2006-03-04
| | | | | sequence such as "0x95 0x27". Patches from Akio Ishida. Also update copyright notice.
* Make the COPY command return a command tag that includes the number ofTom Lane2006-03-03
| | | | | rows copied. Backend side of Volkan Yazici's recent patch, with corrections and documentation.
* Dept. of second thoughts: rejigger the TRUNCATE ... CASCADE patch so thatTom Lane2006-03-03
| | | | | | | relations are still checked for permissions etc as soon as they are opened. The original form of the patch could hold exclusive lock for a long time on relations that the user doesn't even have permissions to access, let alone truncate.
* Fix a typo.Neil Conway2006-03-03
|