aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
...
* Simplify Windows implementation of latches. There's no need to keep aHeikki Linnakangas2010-09-15
| | | | | | | | dynamic pool of event handles, we can permanently assign one for each shared latch. Thanks to that, we no longer need a separate shared memory block for latches, and we don't need to know in advance how many shared latches there is, so you no longer need to remember to update NumSharedLatches when you introduce a new latch to the system.
* Don't call OwnLatch while holding a spinlock. OwnLatch can elog() underHeikki Linnakangas2010-09-15
| | | | | some "can't happen" scenarios, and spinlocks should only be held for a few instructions anyway. As pointed out by Fujii Masao.
* Fix join-removal logic for pseudoconstant and outerjoin-delayed quals.Tom Lane2010-09-14
| | | | | | | | | | | | | | | | | | In these cases a qual can get marked with the removable rel in its required_relids, but this is just to schedule its evaluation correctly, not because it really depends on the rel. We were assuming that, in effect, we could throw away *all* quals so marked, which is nonsense. Tighten up the logic to be a little more paranoid about which quals belong to the outer join being considered for removal, and arrange for all quals that don't belong to be updated so they will still get evaluated correctly. Also fix another problem that happened to be exposed by this test case, which was that make_join_rel() was failing to notice some cases where a constant-false qual could be used to prove a join relation empty. If it's a pushed-down constant false, then the relation is empty even if it's an outer join, because the qual applies after the outer join expansion. Per report from Nathan Grange. Back-patch into 9.0.
* Oops, the timeout argument to WaitLatchOrSocket is in microseconds, notHeikki Linnakangas2010-09-14
| | | | milliseconds.
* Don't warn about an in-progress online backup, when we're recovering fromHeikki Linnakangas2010-09-14
| | | | | | | | | | | | | an online backup instead of performing one. pg_ctl can detect that by checking if recovery.conf exists. Backup label file is renamed away early in recovery, so the window where backup label exists during recovery is normally very small, but you can run into it e.g if restore_command is set incorrectly and the startup process never finds even the first WAL segment containing the checkpoint record to start recovery from. Fujii Masao with comments by me.
* Add a comment noting that the owner_pid test in OwnLatch is just a sanityHeikki Linnakangas2010-09-13
| | | | check, per request by Jeff Davis.
* Remove prototype for non-existent function from walreceiver.h. Tidy up byHeikki Linnakangas2010-09-13
| | | | | separating prototypes for functions in walreceiver.c and walreceiverfuncs.c with comments.
* Process options from the startup packed in walsender. Only few optionsHeikki Linnakangas2010-09-13
| | | | | | | | make sense for walsender, but for example application_name and client_encoding do. We still don't apply per-role settings from pg_db_role_setting, because that would require connecting to a database to read the table. Fujii Masao
* SERIALIZABLE transactions are actually implemented beneath the covers withJoe Conway2010-09-11
| | | | | | | | | | | transaction snapshots, i.e. a snapshot registered at the beginning of a transaction. Change variable naming and comments to reflect this reality in preparation for a future, truly serializable mode, e.g. Serializable Snapshot Isolation (SSI). For the moment transaction snapshots are still used to implement SERIALIZABLE, but hopefully not for too much longer. Patch by Kevin Grittner and Dan Ports with review and some minor wording changes by me.
* Add missing #includes, needed on some platforms. This should makeHeikki Linnakangas2010-09-11
| | | | the unixware buildfarm animals happy again.
* Introduce latches. A latch is a boolean variable, with the capability toHeikki Linnakangas2010-09-11
| | | | | | | | | | | | | | | | | | wait until it is set. Latches can be used to reliably wait until a signal arrives, which is hard otherwise because signals don't interrupt select() on some platforms, and even when they do, there's race conditions. On Unix, latches use the so called self-pipe trick under the covers to implement the sleep until the latch is set, without race conditions. On Windows, Windows events are used. Use the new latch abstraction to sleep in walsender, so that as soon as a transaction finishes, walsender is woken up to immediately send the WAL to the standby. This reduces the latency between master and standby, which is good. Preliminary work by Fujii Masao. The latch implementation is by me, with helpful comments from many people.
* Cursor names in the backend are not case-sensitve. This change makes sure thatMichael Meskes2010-09-10
| | | | | | ecpg also does not regard cursor names as case-sensitive. Thanks to Zoltan Boszormenyi for the patch.
* Modify pg_upgrade to set/restore all environment variables related toBruce Momjian2010-09-07
| | | | | | | collation/encoding to match English when reading controldata. This now matches the English variable setting used by pg_regress.c. Backpatch to 9.0.X.
* GROUP BY can only infer functional dependency from non-deferrable primary keys.Tom Lane2010-09-05
| | | | | Peter's original patch had this right, but I dropped the check while revising the code to search pg_constraint instead of pg_index. Spotted by Dean Rasheed.
* Pad the ps_status display with nulls, not blanks, on Darwin.Tom Lane2010-09-04
| | | | | | A long time ago, this didn't work nicely, but it seems to work on all recent versions of OS X. The blank-pad method is less desirable since it results in lots of extra space in ps' output. Per Alexey Klyukin.
* Install a data-type-based solution for protecting pg_get_expr().REL9_1_ALPHA1Tom Lane2010-09-03
| | | | | | | | | | | | Since the code underlying pg_get_expr() is not secure against malformed input, and can't practically be made so, we need to prevent miscreants from feeding arbitrary data to it. We can do this securely by declaring pg_get_expr() to take a new datatype "pg_node_tree" and declaring the system catalog columns that hold nodeToString output to be of that type. There is no way at SQL level to create a non-null value of type pg_node_tree. Since the backend-internal operations that fill those catalog columns operate below the SQL level, they are oblivious to the datatype relabeling and don't need any changes.
* In HEAD only, revert kluge solution for preventing misuse of pg_get_expr().Tom Lane2010-09-03
| | | | | A data-type-based solution, which is much cleaner and more bulletproof, will follow shortly. It seemed best to make this a separate commit though.
* Fix up flushing of composite-type typcache entries to be driven directly byTom Lane2010-09-02
| | | | | | | | | | | | | | | | | | | | | | SI invalidation events, rather than indirectly through the relcache. In the previous coding, we had to flush a composite-type typcache entry whenever we discarded the corresponding relcache entry. This caused problems at least when testing with RELCACHE_FORCE_RELEASE, as shown in recent report from Jeff Davis, and might result in real-world problems given the kind of unexpected relcache flush that that test mechanism is intended to model. The new coding decouples relcache and typcache management, which is a good thing anyway from a structural perspective. The cost is that we have to search the typcache linearly to find entries that need to be flushed. There are a couple of ways we could avoid that, but at the moment it's not clear it's worth any extra trouble, because the typcache contains very few entries in typical operation. Back-patch to 8.2, the same as some other recent fixes in this general area. The patch could be carried back to 8.0 with some additional work, but given that it's only hypothetical whether we're fixing any problem observable in the field, it doesn't seem worth the work now.
* Fix typo. Pointed out by Kevin Grittner.Robert Haas2010-09-02
|
* Cosmetic fixes for KnownAssignedXidsGetOldestXmin, per Fujii Masao.Tom Lane2010-08-30
|
* Fix oversight in RelFileNodeBackend patch: CreateFakeRelcacheEntry needs toTom Lane2010-08-30
| | | | | | initialize the rd_backend field of a fake Relation entry correctly. Fortunately, that is easy, since only non-temp relations should ever be mentioned in the WAL stream.
* Fix misleading DEBUG2 issued during RemoveOldXlogFiles()Simon Riggs2010-08-30
|
* Truncate subtrans after each restartpoint.Simon Riggs2010-08-30
| | | | Issue reported by Harald Kolb, patch by Fujii Masao, review by me.
* Teach GetOldestXmin() about KnownAssignedXids during recovery.Simon Riggs2010-08-30
| | | | | Very minor issue, though this is required for a later patch. Reported by Heikki Linnakangas.
* Fix typo in comment.Heikki Linnakangas2010-08-30
|
* Reduce PANIC to ERROR in some occasionally-reported btree failure cases.Tom Lane2010-08-29
| | | | | | | | | | | | | | | | | | | | | | | | This patch changes _bt_split() and _bt_pagedel() to throw a plain ERROR, rather than PANIC, for several cases that are reported from the field from time to time: * right sibling's left-link doesn't match; * PageAddItem failure during _bt_split(); * parent page's next child isn't right sibling during _bt_pagedel(). In addition the error messages for these cases have been made a bit more verbose, with additional values included. The original motivation for PANIC here was to capture core dumps for subsequent analysis. But with so many users whose platforms don't capture core dumps by default, or who are unprepared to analyze them anyway, it's hard to justify a forced database restart when we can fairly easily detect the problems before we've reached the critical sections where PANIC would be necessary. It is not currently known whether the reports of these messages indicate well-hidden bugs in Postgres, or are a result of storage-level malfeasance; the latter possibility suggests that we ought to try to be more robust even if there is a bug here that's ultimately found. Backpatch to 8.2. The code before that is sufficiently different that it doesn't seem worth the trouble to back-port further.
* Insert additional compiler placation into objectaddress.c.Robert Haas2010-08-27
| | | | | | | Peter Eisentraut reports that some bits of the "address" variable in get_object_address() give "may be used uninitialized" warnings; this likes the only excuse his compiler could have for thinking that's possible.
* Small refactoring of makeVar() from a TargetEntryPeter Eisentraut2010-08-27
|
* Rewrite comment code for better modularity, and add necessary locking.Robert Haas2010-08-27
| | | | Review by Alvaro Herrera, KaiGai Kohei, and Tom Lane.
* Document the existence of the socket lock file under unix_socket_directory,Tom Lane2010-08-26
| | | | | | which is perhaps not a terribly good spot for it but there doesn't seem to be a better place. Also add a source-code comment pointing out a couple reasons for having a separate lock file. Per suggestion from Greg Smith.
* Update time zone data files to tzdata release 2010l: DST law changes inTom Lane2010-08-26
| | | | | | | Egypt and Palestine. Added new names for two Micronesian timezones: Pacific/Chuuk is now preferred over Pacific/Truk (and the preferred abbreviation is CHUT not TRUT) and Pacific/Pohnpei is preferred over Pacific/Ponape. Historical corrections for Finland.
* Improve wording for privilege description on certain failure messages; theAlvaro Herrera2010-08-26
| | | | | original misleadingly suggests that only access is meant, causing confusion. Per recent trouble report by Robert McGehee on pgsql-admin.
* Remove duplicate translatable phraseAlvaro Herrera2010-08-26
|
* Fix ExecMakeTableFunctionResult to verify that all rows returned by a SRFTom Lane2010-08-26
| | | | | | | | | | | returning "record" actually do have the same rowtype. This is needed because the parser can't realistically enforce that they will all have the same typmod, as seen in a recent example from David Wheeler. Back-patch to 8.0, which is as far back as we have the notion of RECORD subtypes being distinguished by typmod. Wheeler's example depends on 8.4-and-up features, but I suspect there may be ways to provoke similar failures before 8.4.
* Improve hint message for ENOMEM failure from shmget().Tom Lane2010-08-25
| | | | | | | | | | | | It turns out that some platforms return ENOMEM for a request that violates SHMALL, whereas we were assuming that ENOSPC would always be used for that. Apparently the latter is a Linuxism while ENOMEM is the BSD tradition. Extend the ENOMEM hint to suggest that raising SHMALL might be needed. Per gripe from A.M. Backpatch to 9.0, but not further, because this doesn't seem important enough to warrant creating extra translation work in the stable branches. (If it were, we'd have figured this out years ago.)
* Catch null pointer returns from PyCObject_AsVoidPtr and PyCObject_FromVoidPtrPeter Eisentraut2010-08-25
| | | | | | | | This is reproducibly possible in Python 2.7 if the user turned PendingDeprecationWarning into an error, but it's theoretically also possible in earlier versions in case of exceptional conditions. backpatched to 8.0
* Avoid passing signed chars to <ctype.h> functions ... same oldTom Lane2010-08-25
| | | | portability mistake as always. Per buildfarm member pika.
* Make EXPLAIN show the function call expression of a FunctionScan plan node,Tom Lane2010-08-24
| | | | but only in VERBOSE mode. Per discussion.
* When in automatic dependency mode, never delete any intermediatePeter Eisentraut2010-08-24
| | | | | | | | | | | files automatically. Otherwise, the following could happen: When starting from a clean source tree, the first build would delete the intermediate file, but also create the dependency file, which mentions the intermediate file, thus making it non-intermediate. The second build will then need to rebuild the now non-intermediate missing file. So the second build will do work even though nothing had changed. One place where this happens is the .c -> .o -> .so chain for some contrib modules.
* Add string functions: concat(), concat_ws(), left(), right(), and reverse().Itagaki Takahiro2010-08-24
| | | | Pavel Stehule, reviewed by me.
* Marginal code cleanup for streaming replication.Tom Lane2010-08-23
| | | | | | There is no reason that proc.c should have to get involved in this dirty hack for letting the postmaster know which children are walsenders. Revert that file to the way it was, and confine the kluge to pmsignal.c and postmaster.c.
* Use a non-locale-dependent definition of isspace() in array_in/array_out.Tom Lane2010-08-21
| | | | | | | | | | | | | | | | | | | array_in discards unquoted leading and trailing whitespace in array values, while array_out is careful to quote array elements that contain whitespace. This is problematic when the definition of "whitespace" varies between locales: array_in could drop characters that were meant to be part of the value. To avoid that, lock down "whitespace" to mean only the traditional six ASCII space characters. This change also works around a bug in OS X and some older BSD systems, in which isspace() could return true for character fragments in UTF8 locales. (There may be other places in PG where that bug could cause problems, but this is the only one complained of so far; see recent report from Steven Schlansker.) Back-patch to 9.0, but not further. Given the lack of previous reports of trouble, changing this behavior in stable branches seems to offer more risk of breaking applications than reward of avoiding problems.
* Improve parallel restore's ability to cope with selective restore (-L option).Tom Lane2010-08-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The original coding tended to break down in the face of modified restore orders, as shown in bug #5626 from Albert Ullrich, because it would flip over into parallel-restore operation too soon. That causes problems because we don't have sufficient dependency information in dump archives to allow safe parallel processing of SECTION_PRE_DATA items. Even if we did, it's probably undesirable to allow that to override the commanded restore order. To fix the problem of omitted items causing unexpected changes in restore order, tweak SortTocFromFile so that omitted items end up at the head of the list not the tail. This ensures that they'll be examined and their dependencies will be marked satisfied before we get to any interesting items. In HEAD and 9.0, we can easily change restore_toc_entries_parallel so that all SECTION_PRE_DATA items are guaranteed to be processed in the initial serial-restore loop, and hence in commanded order. Only DATA and POST_DATA items are candidates for parallel processing. For them there might be variations from the commanded order because of parallelism, but we should do it in a safe order thanks to dependencies. In 8.4 it's much harder to make such a guarantee. I settled for not letting the initial loop break out into parallel processing mode if it sees a DATA/POST_DATA item that's not to be restored; this at least prevents a non-restorable item from causing premature exit from the loop. This means that 8.4 will be more likely to fail given a badly-ordered -L list than 9.x, but we don't really promise any such thing will work anyway.
* Adjust regression tests for previous commit, that I forgotMagnus Hagander2010-08-21
| | | | to include...
* Add vacuum and analyze counters to pg_stat_*_tables views.Magnus Hagander2010-08-21
|
* Add missing processing of OptTemp in CREATE IF NOT EXISTS variantTom Lane2010-08-20
| | | | for typed tables. Noted by Robert Haas.
* Remove the isLocalBuf argument from ReadBuffer_common.Robert Haas2010-08-20
| | | | | | Since an SMgrRelation now knows whether or not the underlying relation is temporary, there's no point in also passing that information via an additional argument.
* Bring some sanity to the trace_recovery_messages code and docs.Tom Lane2010-08-19
| | | | | | | | | | Per gripe from Fujii Masao, though this is not exactly his proposed patch. Categorize as DEVELOPER_OPTIONS and set context PGC_SIGHUP, as per Fujii, but set the default to LOG because higher values aren't really sensible (see the code for trace_recovery()). Fix the documentation to agree with the code and to try to explain what the variable actually does. Get rid of no-op calls trace_recovery(LOG), which accomplish nothing except to demonstrate that this option confuses even its author.
* Allow USING and INTO clauses of plpgsql's EXECUTE to appear in either order.Tom Lane2010-08-19
| | | | | | | | | | | | Aside from being more forgiving, this prevents a rather surprising misbehavior when the "wrong" order was used: the old code didn't throw a syntax error, but absorbed the INTO clause into the last USING expression, which then did strange things downstream. Intentionally not changing the documentation; we'll continue to advertise only the "standard" clause order. Backpatch to 8.4, where the USING clause was added to EXECUTE.
* Keep exec_simple_check_plan() from thinking "SELECT foo INTO bar" is simple.Tom Lane2010-08-19
| | | | | | | | | | | | It's not clear if this situation can occur in plpgsql other than via the EXECUTE USING case Heikki illustrated, which I will shortly close off. However, ignoring the intoClause if it's there is surely wrong, so let's patch it for safety. Backpatch to 8.3, which is as far back as this code has a PlannedStmt to deal with. There might be another way to make an equivalent test before that, but since this is just preventing hypothetical bugs, I'm not going to obsess about it.