aboutsummaryrefslogtreecommitdiff
path: root/src/backend
Commit message (Collapse)AuthorAge
...
* Minor changes to autovacuum worker: change error handling so that it continuesAlvaro Herrera2007-10-24
| | | | | | | | | | | | | with the next table on schedule instead of exiting, in all cases instead of just on query cancel. Add a errcontext() line indicating the activity of the worker to the error message when it is cancelled. Change the WorkerInfo struct to contain a pointer to the worker's PGPROC instead of just the PID. Add forgotten post-auth delays, per Simon Riggs. Also to autovac launcher.
* Fix UPDATE/DELETE WHERE CURRENT OF to support repeated update and update-Tom Lane2007-10-24
| | | | | | | | | | | | | | | | then-delete on the current cursor row. The basic fix is that nodeTidscan.c has to apply heap_get_latest_tid() to the current-scan-TID obtained from the cursor query; this ensures we get the latest row version to work with. However, since that only works if the query plan is a TID scan, we also have to hack the planner to make sure only that type of plan will be selected. (Formerly, the planner might decide to apply a seqscan if the table is very small. This change is probably a Good Thing anyway, since it's hard to see how a seqscan could really win.) That means the execQual.c code to support CurrentOfExpr as a regular expression type is dead code, so replace it with just an elog(). Also, add regression tests covering these cases. Note that the added tests expose the fact that re-fetching an updated row misbehaves if the cursor used FOR UPDATE. That's an independent bug that should be fixed later. Per report from Dharmendra Goyal.
* Keep heap_page_prune from marking the buffer dirty when it didn'tTom Lane2007-10-24
| | | | | really change anything. Per report from Itagaki Takahiro. Fix by Pavan Deolasee.
* Set read_only = TRUE while evaluating input queries for ts_rewrite()Tom Lane2007-10-24
| | | | | | and ts_stat(), per my recent suggestion. Also add a possibly-not-needed- but-can't-hurt check for NULL SPI_tuptable, before we try to dereference same.
* Remove the aggregate form of ts_rewrite(), since it doesn't work as desiredTom Lane2007-10-24
| | | | | | | | | if there are zero rows to aggregate over, and the API seems both conceptually and notationally ugly anyway. We should look for something that improves on the tsquery-and-text-SELECT version (which is also pretty ugly but at least it works...), but it seems that will take query infrastructure that doesn't exist today. (Hm, I wonder if there's anything in or near SQL2003 window functions that would help?) Per discussion.
* Rename and slightly redefine the default text search parser's "word"Tom Lane2007-10-23
| | | | | | | | | | | | | categories, as per discussion. asciiword (formerly lword) is still ASCII-letters-only, and numword (formerly word) is still the most general mixed-alpha-and-digits case. But word (formerly nlword) is now any-group-of-letters-with-at-least-one-non-ASCII, rather than all-non-ASCII as before. This is no worse than before for parsing mixed Russian/English text, which seems to have been the design center for the original coding; and it should simplify matters for parsing most European languages. In particular it will not be necessary for any language to accept strings containing digits as being regular "words". The hyphenated-word categories are adjusted similarly.
* Use snprintf instead of wsprintf, and use getenv("APPDATA") instead ofMagnus Hagander2007-10-23
| | | | | | | | | | | | | | SHGetFolderPath. This removes the direct dependency on shell32.dll and user32.dll, which eats a lot of "desktop heap" for each backend that's started. The desktop heap is a very limited resource, causing backends to no longer start once it's been exhausted. We still have indirect depdendencies on user32.dll through third party libraries, but those can't easily be removed. Dave Page
* Fix two-argument form of ts_rewrite() so it actually works for cases whereTom Lane2007-10-23
| | | | | a later rewrite rule should change a subtree modified by an earlier one. Per my gripe of a few days ago.
* Fix several bugs in tsvectorin, including crash due to uninitialized field andTom Lane2007-10-23
| | | | | | | | | | | | | miscomputation of required palloc size. The crash could only occur if the input contained lexemes both with and without positions, which is probably not common in practice. The miscomputation would definitely result in wasted space. Also fix some inconsistent coding around alignment of strings and positions in a tsvector value; these errors could also lead to crashes given mixed with/without position data and a machine that's picky about alignment. And be more careful about checking for overflow of string offsets. Patch is only against HEAD --- I have not looked to see if same bugs are in back-branch contrib/tsearch2 code.
* Adjust ts_debug's output as per my proposal of yesterday: show theTom Lane2007-10-22
| | | | | | | active dictionary and its output lexemes as separate columns, instead of smashing them into one text column, and lowercase the column names. Also, define the output rowtype using OUT parameters instead of a composite type, to be consistent with the other built-in functions.
* Remove an Assert that's been obsoleted by recent changes in the parsetreeTom Lane2007-10-22
| | | | representation of DECLARE CURSOR. Report and fix by Heikki.
* Add a useless return statement to suppress a warning seen with someTom Lane2007-10-22
| | | | | | versions of gcc (I'm seeing it with Apple's gcc 4.0.1). I think the reason we did not see this before was that the assert() macros in the regex code were all no-ops till recently.
* Fix shared tsvector/tsquery input code so that we don't say "syntax error inTom Lane2007-10-21
| | | | | tsvector" when we are really parsing a tsquery. Report the bogus input, too. Make styles of some related error messages more consistent.
* Adjust error message to agree with documentation. The tsearch documentationTom Lane2007-10-20
| | | | uniformly calls these things weights, not classes.
* Found another small glitch in tsearch API: the two versions of ts_lexize()Tom Lane2007-10-19
| | | | | | are really redundant, since we invented a regdictionary alias type. We can have just one function, declared as taking regdictionary, and it will handle both behaviors. Noted while working on documentation.
* Tweak toast-related logic in heapam.c so that the toaster is only invokedTom Lane2007-10-16
| | | | | | | when relkind = RELKIND_RELATION. This syncs these tests with the Asserts in tuptoaster.c, and ensures that we won't ever try to, for example, compress a sequence's tuple. Problem found by Greg Stark while stress-testing with much-smaller-than-normal page sizes.
* Re-allow UTF8 encodings on win32. Since UTF8 is converted toMagnus Hagander2007-10-16
| | | | UTF16 before being used, all (valid) locales will work for this.
* Fix pg_wchar_table[] to match revised ordering of the encoding ID enum.Tom Lane2007-10-15
| | | | | Add some comments so hopefully the next poor sod doesn't fall into the same trap. (Wrong comments are worse than none at all...)
* Include NOLOGIN roles in the 'flat' password file. In the originalTom Lane2007-10-15
| | | | | | | coding this was seen as useless, but the problem with not including them is that the error message will often be something about authentication failure, rather than the more helpful one about 'role is not permitted to log in'. Per discussion.
* Migrate the former contrib/txid module into core. This will make it easierTom Lane2007-10-13
| | | | for Slony and Skytools to depend on it. Per discussion.
* Guard against possible double free during error escape from XMLTom Lane2007-10-13
| | | | | functions. Patch for the reported issue from Kris Jurka, some other potential trouble spots plugged by Tom.
* Fix the inadvertent libpq ABI breakage discovered by Martin Pitt: theTom Lane2007-10-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | renumbering of encoding IDs done between 8.2 and 8.3 turns out to break 8.2 initdb and psql if they are run with an 8.3beta1 libpq.so. For the moment we can rearrange the order of enum pg_enc to keep the same number for everything except PG_JOHAB, which isn't a problem since there are no direct references to it in the 8.2 programs anyway. (This does force initdb unfortunately.) Going forward, we want to fix things so that encoding IDs can be changed without an ABI break, and this commit includes the changes needed to allow libpq's encoding IDs to be treated as fully independent of the backend's. The main issue is that libpq clients should not include pg_wchar.h or otherwise assume they know the specific values of libpq's encoding IDs, since they might encounter version skew between pg_wchar.h and the libpq.so they are using. To fix, have libpq officially export functions needed for encoding name<=>ID conversion and validity checking; it was doing this anyway unofficially. It's still the case that we can't renumber backend encoding IDs until the next bump in libpq's major version number, since doing so will break the 8.2-era client programs. However the code is now prepared to avoid this type of problem in future. Note that initdb is no longer a libpq client: we just pull in the two source files we need directly. The patch also fixes a few places that were being sloppy about checking for an unrecognized encoding name.
* Fix ALTER COLUMN TYPE to preserve the tablespace and reloptions of indexesTom Lane2007-10-13
| | | | | | | | | | it affects. The original coding neglected tablespace entirely (causing the indexes to move to the database's default tablespace) and for an index belonging to a UNIQUE or PRIMARY KEY constraint, it would actually try to assign the parent table's reloptions to the index :-(. Per bug #3672 and subsequent investigation. 8.0 and 8.1 did not have reloptions, but the tablespace bug is present.
* Teach planagg.c that partial indexes specifying WHERE foo IS NOT NULL can beTom Lane2007-10-13
| | | | | | | | | used to perform MIN(foo) or MAX(foo), since we want to discard null rows in the indexscan anyway. (This would probably fall out for free if we were injecting the IS NOT NULL clause somewhere earlier, but given the current anatomy of the MIN/MAX optimization code we have to do it explicitly. Fortunately, very little added code is needed.) Per a discussion with Henk de Wit.
* When telling the bgwriter that we need a checkpoint because too much xlogTom Lane2007-10-12
| | | | | | | | | has been consumed, recheck against the latest value of RedoRecPtr before really sending the signal. This avoids useless checkpoint activity if XLogWrite is executed when we have a very stale local copy of RedoRecPtr. The potential for useless checkpoint is very much worse in 8.3 because of the walwriter process (which never does XLogInsert), so while this behavior was intentional, it needs to be changed. Per report from Itagaki Takahiro.
* Remove hack in pg_tablespace_aclmask() that disallowed permissionsTom Lane2007-10-12
| | | | | | | | on pg_global even to superusers, and replace it with checks in various other places to complain about invalid uses of pg_global. This ends up being a bit more code but it allows a more specific error message to be given, and it un-breaks pg_tablespace_size() on pg_global. Per discussion.
* Ensure that the result of evaluating a function during constant-expressionTom Lane2007-10-11
| | | | | | | simplification gets detoasted before it is incorporated into a Const node. Otherwise, if an immutable function were to return a TOAST pointer (an unlikely case, but it can be made to happen), we would end up with a plan that depends on the continued existence of the out-of-line toast datum.
* Remove incorrect use of VARSIZE() on a toasted datum. We can just remove itTom Lane2007-10-11
| | | | | instead of fix it, since once we've set toast_action[i] to 'p' it no longer matters what toast_sizes[i] is. Greg Stark
* Fix the plan-invalidation mechanism to treat regclass constants that refer toTom Lane2007-10-11
| | | | | | | | | | a relation as a reason to invalidate a plan when the relation changes. This handles scenarios such as dropping/recreating a sequence that is referenced by nextval('seq') in a cached plan. Rather than teach plancache.c all about digging through plan trees to find regclass Consts, we charge the planner's setrefs.c with making a list of the relation OIDs on which each plan depends. That way the list can be built cheaply during a plan tree traversal that has to happen anyway. Per bug #3662 and subsequent discussion.
* Make dumpcolors() have tolerable performance when using 32-bit chr,Tom Lane2007-10-06
| | | | | | as we do (and upstream Tcl doesn't). The loop limit might be subject to negotiation if anyone ever tries to do regex debugging in Far Eastern languages, but for now 1000 seems plenty. CHR_MAX was right out :-(
* Adjust some regex debugging printouts to not give wrong-format-widthTom Lane2007-10-06
| | | | | warnings on a 64-bit machine. Noted while chasing a recent regex bug report.
* Keep the planner from failing on "WHERE false AND something IN (SELECT ...)".Tom Lane2007-10-04
| | | | | | | | | | | | eval_const_expressions simplifies this to just "WHERE false", but we have already done pull_up_IN_clauses so the IN join will be done, or at least planned, anyway. The trouble case comes when the sub-SELECT is itself a join and we decide to implement the IN by unique-ifying the sub-SELECT outputs: with no remaining reference to the output Vars in WHERE, we won't have propagated the Vars up to the upper join point, leading to "variable not found in subplan target lists" error. Fix by adding an extra scan of in_info_list and forcing all Vars mentioned therein to be propagated up to the IN join point. Per bug report from Miroslav Sulc.
* Change Assert() to a plain test and elog, just to see if that worksTom Lane2007-10-04
| | | | around the icc bug exhibited by buildfarm member dugong.
* Avoid assuming that struct varattrib_pointer doesn't get padded by theTom Lane2007-10-01
| | | | | | | | | | | compiler --- at least on ARM, it does. I suspect that the varvarlena patch has been creating larger-than-intended toast pointers all along on ARM, but it wasn't exposed until the latest tweak added some Asserts that calculated the expected size in a different way. We could probably have fixed this by adding __attribute__((packed)) as is done for ItemPointerData, but struct varattrib_pointer isn't really all that useful anyway, so it seems cleanest to just get rid of it and have only struct varattrib_1b_e. Per results from buildfarm member quagga.
* Add an extra header byte to TOAST-pointer datums to represent their sizeTom Lane2007-09-30
| | | | | | | explicitly. This means a TOAST pointer takes 18 bytes instead of 17 --- still smaller than in 8.2 --- which seems a good tradeoff to ensure we won't have painted ourselves into a corner if we want to support multiple types of TOAST pointer later on. Per discussion with Greg Stark.
* Adjust recovery PS display as agreed with Simon: 'waiting for XXX'Tom Lane2007-09-30
| | | | | | while the restore_command does its thing, then 'recovering XXX' while processing the segment file. These operations are heavyweight enough that an extra PS display set shouldn't bother anyone.
* Make recovery show the current input WAL segment name in the startupTom Lane2007-09-29
| | | | | process' PS display. After a suggestion by Simon (not exactly his patch though).
* Disallow CLUSTER using an invalid index (that is, one left over from a failedTom Lane2007-09-29
| | | | | | CREATE INDEX CONCURRENTLY). Such an index might not have entries for every heap row and thus clustering with it would result in silent data loss. The scenario requires a pretty foolish DBA, but still ...
* Improve consistency of the error messages generated when you try to useTom Lane2007-09-29
| | | | | | ALTER TABLE on a composite type or ALTER TYPE on a table's rowtype. We already rejected these cases, but the error messages were a bit random and didn't always provide a HINT to use the other command type.
* Make archive recovery always start a new timeline, rather than only when aTom Lane2007-09-29
| | | | | | | recovery stop time was used. This avoids a corner-case risk of trying to overwrite an existing archived copy of the last WAL segment, and seems simpler and cleaner all around than the original definition. Per example from Jon Colverson and subsequent analysis by Simon.
* Change initdb and CREATE DATABASE to actively reject attempts to createTom Lane2007-09-28
| | | | | | | | | | | | databases with encodings that are incompatible with the server's LC_CTYPE locale, when we can determine that (which we can on most modern platforms, I believe). C/POSIX locale is compatible with all encodings, of course, so there is still some usefulness to CREATE DATABASE's ENCODING option, but this will insulate us against all sorts of recurring complaints caused by mismatched settings. I moved initdb's existing LC_CTYPE-to-encoding mapping knowledge into a new src/port/ file so it could be shared by CREATE DATABASE.
* Add virtual transaction IDs to CSVLOG output, so that messages coming fromTom Lane2007-09-27
| | | | | | the same transaction can be identified even when no regular XID was assigned. This seems essential after addition of the lazy-XID patch. Also some minor code cleanup in write_csvlog().
* Fix Assert failure in ExpandColumnRefStar --- what I thought was a can'tTom Lane2007-09-27
| | | | | | | | | happen condition can happen given incorrect input. The real problem is that gram.y should try harder to distinguish * from "*" --- the latter is a legal column name per spec, and someday we ought to treat it that way. However fixing that is too invasive for a back-patch, and it's too late for the 8.3 cycle too. So just reduce the Assert to a plain elog for now. Per report from NikhilS.
* Some small tuptoaster improvements from Greg Stark. Avoid unnecessaryTom Lane2007-09-26
| | | | | | decompression of an already-compressed external value when we have to copy it; save a few cycles when a value is too short for compression; and annotate various lines that are currently unreachable.
* Minor improvements in backup and recovery:Tom Lane2007-09-26
| | | | | | | | | | | | | | | | | | | | | - create a separate archive_mode GUC, on which archive_command is dependent - %r option in recovery.conf sends last restartpoint to recovery command - %r used in pg_standby, updated README - minor other code cleanup in pg_standby - doc on Warm Standby now mentions pg_standby and %r - log_restartpoints recovery option emits LOG message at each restartpoint - end of recovery now displays last transaction end time, as requested by Warren Little; also shown at each restartpoint - restart archiver if needed to carry away WAL files at shutdown Simon Riggs
* Adjust the new memory limit in the lazy vacuum code to use MaxHeapTuplesPerPageAlvaro Herrera2007-09-26
| | | | | tuples per page instead of fixed 200, to better cope with systems that use a different block size.
* Create a function variable "join_search_hook" to let plugins override theTom Lane2007-09-26
| | | | | | | | join search order portion of the planner; this is specifically intended to simplify developing a replacement for GEQO planning. Patch by Julius Stroffek, editorialized on by me. I renamed make_one_rel_by_joins to standard_join_search and make_rels_by_joins to join_search_one_level to better reflect their place within this scheme.
* Fix crash of to_tsvector() function on huge input: compareWORD()Teodor Sigaev2007-09-26
| | | | | | | function didn't return correct result for word position greate than limit. Per report from Stuart Bishop <stuart@stuartbishop.net>
* In the integer-datetimes case, date2timestamp and date2timestamptz needTom Lane2007-09-26
| | | | | to check for overflow because the legal range of type date is actually wider than timestamp's. Problem found by Neil Conway.
* Dept. of second thoughts: fix loop in BgBufferSync so that the exit whenTom Lane2007-09-25
| | | | | | | bgwriter_lru_maxpages is exceeded leaves the loop variables in the expected state. In the original coding, we'd fail to advance next_to_clean, causing that buffer to be probably-uselessly rechecked next time, and also have an off-by-one idea of the number of buffers scanned.