aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
...
* Allow hash joins to be interrupted while searching hash table for match.Tom Lane2011-06-01
| | | | | | | | | | | Per experimentation with a recent example, in which unreasonable amounts of time could elapse before the backend would respond to a query-cancel. This might be something to back-patch, but the patch doesn't apply cleanly because this code was rewritten for 9.1. Given the lack of field complaints I won't bother for now. Cédric Villemain
* Further improvements in pg_ctl's new wait-for-postmaster-start logic.Tom Lane2011-06-01
| | | | | | | | | | | | | | | | | | | | | | | Add a postmaster_is_alive() test to the wait loop, so that we stop waiting if the postmaster dies without removing its pidfile. Unfortunately this only helps after the postmaster has created its pidfile, since until then we don't know which PID to check. But if it never does create the pidfile, we can give up in a relatively short time, so this is a useful addition in practice. Per suggestion from Fujii Masao, though this doesn't look very much like his patch. In addition, improve pg_ctl's ability to cope with pre-existing pidfiles. Such a file might or might not represent a live postmaster that is going to block our postmaster from starting, but the previous code pre-judged the situation and gave up waiting immediately. Now, we will wait for up to 5 seconds to see if our postmaster overwrites such a file. This issue interacts with Fujii's patch because we would make the wrong conclusion if we did the postmaster_is_alive() test with a pre-existing PID. All of this could be improved if we rewrote start_postmaster() so that it could report the child postmaster's PID, so that we'd know a-priori the correct PID to test with postmaster_is_alive(). That looks like a bit too much change for so late in the 9.1 development cycle, unfortunately.
* Protect GIST logic that assumes penalty values can't be negative.Tom Lane2011-05-31
| | | | | | | | | | Apparently sane-looking penalty code might return small negative values, for example because of roundoff error. This will confuse places like gistchoose(). Prevent problems by clamping negative penalty values to zero. (Just to be really sure, I also made it force NaNs to zero.) Back-patch to all supported branches. Alexander Korotkov
* Recode non-ASCII characters in source to UTF-8Peter Eisentraut2011-05-31
| | | | | | For consistency, have all non-ASCII characters from contributors' names in the source be in UTF-8. But remove some other more gratuitous uses of non-ASCII characters.
* Replace use of credential control messages with getsockopt(LOCAL_PEERCRED).Tom Lane2011-05-31
| | | | | | | | | | | | | | | | | | | | | | | | It turns out the reason we hadn't found out about the portability issues with our credential-control-message code is that almost no modern platforms use that code at all; the ones that used to need it now offer getpeereid(), which we choose first. The last holdout was NetBSD, and they added getpeereid() as of 5.0. So far as I can tell, the only live platform on which that code was being exercised was Debian/kFreeBSD, ie, FreeBSD kernel with Linux userland --- since glibc doesn't provide getpeereid(), we fell back to the control message code. However, the FreeBSD kernel provides a LOCAL_PEERCRED socket parameter that's functionally equivalent to Linux's SO_PEERCRED. That is both much simpler to use than control messages, and superior because it doesn't require receiving a message from the other end at just the right time. Therefore, add code to use LOCAL_PEERCRED when necessary, and rip out all the credential-control-message code in the backend. (libpq still has such code so that it can still talk to pre-9.1 servers ... but eventually we can get rid of it there too.) Clean up related autoconf probes, too. This means that libpq's requirepeer parameter now works on exactly the same platforms where the backend supports peer authentication, so adjust the documentation accordingly.
* Fix portability bugs in use of credentials control messages for peer auth.Tom Lane2011-05-30
| | | | | | | | | | | | | | | | | Even though our existing code for handling credentials control messages has been basically unchanged since 2001, it was fundamentally wrong: it did not ensure proper alignment of the supplied buffer, and it was calculating buffer sizes and message sizes incorrectly. This led to failures on platforms where alignment padding is relevant, for instance FreeBSD on 64-bit platforms, as seen in a recent Debian bug report passed on by Martin Pitt (http://bugs.debian.org//cgi-bin/bugreport.cgi?bug=612888). Rewrite to do the message-whacking using the macros specified in RFC 2292, following a suggestion from Theo de Raadt in that thread. Tested by me on Debian/kFreeBSD-amd64; since OpenBSD and NetBSD document the identical CMSG API, it should work there too. Back-patch to all supported branches.
* Fix VACUUM so that it always updates pg_class.reltuples/relpages.Tom Lane2011-05-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we added the ability for vacuum to skip heap pages by consulting the visibility map, we made it just not update the reltuples/relpages statistics if it skipped any pages. But this could leave us with extremely out-of-date stats for a table that contains any unchanging areas, especially for TOAST tables which never get processed by ANALYZE. In particular this could result in autovacuum making poor decisions about when to process the table, as in recent report from Florian Helmberger. And in general it's a bad idea to not update the stats at all. Instead, use the previous values of reltuples/relpages as an estimate of the tuple density in unvisited pages. This approach results in a "moving average" estimate of reltuples, which should converge to the correct value over multiple VACUUM and ANALYZE cycles even when individual measurements aren't very good. This new method for updating reltuples is used by both VACUUM and ANALYZE, with the result that we no longer need the grotty interconnections that caused ANALYZE to not update the stats depending on what had happened in the parent VACUUM command. Also, fix the logic for skipping all-visible pages during VACUUM so that it looks ahead rather than behind to decide what to do, as per a suggestion from Greg Stark. This eliminates useless scanning of all-visible pages at the start of the relation or just after a not-all-visible page. In particular, the first few pages of the relation will not be invariably included in the scanned pages, which seems to help in not overweighting them in the reltuples estimate. Back-patch to 8.4, where the visibility map was introduced.
* Suppress foreign data wrappers and foreign servers in partial dumpsPeter Eisentraut2011-05-30
| | | | | | | This is consistent with the behavior of other global objects such as languages and extensions. Omitting foreign servers also omits the respective user mappings.
* Refuse "local" lines in pg_hba.conf on platforms that don't support itMagnus Hagander2011-05-30
| | | | | This makes the behavior compatible with that of hostssl, which also throws an error when there is no SSL support included.
* Don't include local line on platforms without supportMagnus Hagander2011-05-30
| | | | | | | | | Since we now include a sample line for replication on local connections in pg_hba.conf, don't include it where local connections aren't available (such as on win32). Also make sure we use authmethodlocal and not authmethod on the sample line.
* The row-version chaining in Serializable Snapshot Isolation was still wrong.Heikki Linnakangas2011-05-30
| | | | | | | | | | On further analysis, it turns out that it is not needed to duplicate predicate locks to the new row version at update, the lock on the version that the transaction saw as visible is enough. However, there was a different bug in the code that checks for dangerous structures when a new rw-conflict happens. Fix that bug, and remove all the row-version chaining related code. Kevin Grittner & Dan Ports, with some comment editorialization by me.
* Make message more consistentAlvaro Herrera2011-05-30
|
* Remove usage of &PL_sv_undef in hashes and arraysAlvaro Herrera2011-05-30
| | | | | | | | | | | | | | | According to perlguts, &PL_sv_undef is not the right thing to use in those cases because it doesn't behave the same way as an undef value via Perl code. Seems the intuitive way to deal with undef values is subtly enough broken that it's hard to notice when misused. The broken uses got inadvertently introduced in commit 87bb2ade2ce646083f39d5ab3e3307490211ad04 by Alexey Klyukin, Alex Hunsaker and myself on 2011-02-17; no backpatch is necessary. Per testing report from Greg Mullane. Author: Alex Hunsaker
* Add pg_basebackup -z option for compression with default levelPeter Eisentraut2011-05-30
|
* Allow pg_basebackup compressed tar output to stdoutPeter Eisentraut2011-05-29
|
* Avoid compiler warning when building without zlibPeter Eisentraut2011-05-29
|
* Fix null-dereference crash in parse_xml_decl().Tom Lane2011-05-28
| | | | | | | | | | | | | | parse_xml_decl's header comment says you can pass NULL for any unwanted output parameter, but it failed to honor this contract for the "standalone" flag. The only currently-affected caller is xml_recv, so the net effect is that sending a binary XML value containing a standalone parameter in its xml declaration would crash the backend. Per bug #6044 from Christopher Dillard. In passing, remove useless initializations of parse_xml_decl's output parameters in xml_parse. Back-patch to 8.3, where this code was introduced.
* Remove unused variableAlvaro Herrera2011-05-27
| | | | Cédric Villemain
* Improve corner cases in pg_ctl's new wait-for-postmaster-startup code.Tom Lane2011-05-27
| | | | | | | | | | | | | | | | With "-w -t 0", we should report "still starting up", not "ok". If we fall out of the loop without ever being able to call PQping (because we were never able to construct a connection string), report "no response", not "ok". This gets rid of corner cases in which we'd claim the server had started even though it had not. Also, if the postmaster.pid file is not there at any point after we've waited 5 seconds, assume the postmaster has failed and report that, rather than almost-certainly-fruitlessly continuing to wait. The pidfile should appear almost instantly even when there is extensive startup work to do, so 5 seconds is already a very conservative figure. This part is per a gripe from MauMau --- there might be better ways to do it, but nothing simple enough to get done for 9.1.
* Preserve caller's memory context in ProcessCompletedNotifies().Tom Lane2011-05-27
| | | | | | | | | | | | This is necessary to avoid long-term memory leakage, because the main loop in PostgresMain expects to be executing in MessageContext, and hence is a bit sloppy about freeing stuff that is only needed for the duration of processing the current client message. The known case of an actual leak is when encoding conversion has to be done on the incoming command string, but there might be others. Per report from Per-Olov Esgard. Back-patch to 9.0, where the bug was introduced by the LISTEN/NOTIFY rewrite.
* Check the return code of pthread_create(). Otherwise we go into an infiniteHeikki Linnakangas2011-05-27
| | | | | | loop if it fails, which is what what happened on my HP-UX box. (I think the reason it failed on that box is a misconfiguration on my behalf, but that's no reason to hang.)
* Make decompilation of optimized CASE constructs more robust.Tom Lane2011-05-26
| | | | | | | | | | | | | | | | We had some hacks in ruleutils.c to cope with various odd transformations that the optimizer could do on a CASE foo WHEN "CaseTestExpr = RHS" clause. However, the fundamental impossibility of covering all cases was exposed by Heikki, who pointed out that the "=" operator could get replaced by an inlined SQL function, which could contain nearly anything at all. So give up on the hacks and just print the expression as-is if we fail to recognize it as "CaseTestExpr = RHS". (We must cover that case so that decompiled rules print correctly; but we are not under any obligation to make EXPLAIN output be 100% valid SQL in all cases, and already could not do so in some other cases.) This approach requires that we have some printable representation of the CaseTestExpr node type; I used "CASE_TEST_EXPR". Back-patch to all supported branches, since the problem case fails in all.
* Suppress extensions in partial dumps.Tom Lane2011-05-25
| | | | | | | | | We initially had pg_dump emit CREATE EXTENSION commands unconditionally. However, pg_dump has long been in the habit of not dumping procedural language definitions when a --schema or --table switch is given. It seems appropriate to handle extensions the same way, since like PLs they are SQL objects that are not in any particular schema. Per complaint from Adrian Schreyer.
* Put options in some sensible orderPeter Eisentraut2011-05-25
| | | | | | | For the --help output and reference pages of pg_dump, pg_dumpall, pg_restore, put the options in some consistent, mostly alphabetical, and consistent order, rather than newest option last or something like that.
* Convert builddoc.bat into a perl script that actually works.Andrew Dunstan2011-05-25
| | | | | | | | The old .bat file wasn't working for reasons that are unclear, and which it did not seem worth the trouble to ascertain. The new perl script has been tested and is known to work. Soon it will be tested regularly on the buildfarm. The .bat file is kept as a simple wrapper for the perl script.
* Add C comment about why we don't spell out "month" in interval values.Bruce Momjian2011-05-24
|
* Grammar cleanup for src/test/isolation/READMETom Lane2011-05-24
| | | | Josh Kupershmidt
* Cleanup for pull-up-isReset patch.Tom Lane2011-05-24
| | | | | | | | Clear isReset before, not after, calling the context-specific alloc method, so as to preserve the option to do a tail call in MemoryContextAlloc (and also so this code isn't assuming that a failed alloc call won't have changed the context's state before failing). Fix missed direct invocation of reset method. Reformat a comment.
* Add a "local" replication sample entryPeter Eisentraut2011-05-24
| | | | Also adjust alignment a bit to distinguish commented out from comment.
* Message improvementsPeter Eisentraut2011-05-24
|
* Avoid uninitialized bits in the result of QTN2QT().Tom Lane2011-05-24
| | | | | | Found with additional valgrind testing. Noah Misch
* Make plpgsql complain about conflicting IN and OUT parameter names.Tom Lane2011-05-23
| | | | | | | | | | | | The core CREATE FUNCTION code only enforces that IN parameter names are non-duplicate, and that OUT parameter names are separately non-duplicate. This is because some function languages might not have any confusion between the two. But in plpgsql, such names are all in the same namespace, so we'd better disallow it. Per a recent complaint from Dan S. Not back-patching since this is a small issue and the change could cause unexpected failures if we started to enforce it in a minor release.
* Fix integer overflow in text_format function, reported by Dean Rasheed.Heikki Linnakangas2011-05-23
| | | | In the passing, clarify the comment on why text_format_nv wrapper is needed.
* Improve hash_array() logic for combining hash values.Robert Haas2011-05-23
| | | | | | | | | The new logic is less vulnerable to transpositions. This invalidates the contents of hash indexes built with the old functions; hence, bump catversion. Dean Rasheed
* Message style improvementsPeter Eisentraut2011-05-23
|
* Install defenses against overflow in BuildTupleHashTable().Tom Lane2011-05-23
| | | | | | | | | | | | | | | | | | | | | The planner can sometimes compute very large values for numGroups, and in cases where we have no alternative to building a hashtable, such a value will get fed directly to BuildTupleHashTable as its nbuckets parameter. There were two ways in which that could go bad. First, BuildTupleHashTable declared the parameter as "int" but most callers were passing "long"s, so on 64-bit machines undetected overflow could occur leading to a bogus negative value. The obvious fix for that is to change the parameter to "long", which is what I've done in HEAD. In the back branches that seems a bit risky, though, since third-party code might be calling this function. So for them, just put in a kluge to treat negative inputs as INT_MAX. Second, hash_create can go nuts with extremely large requested table sizes (notably, my_log2 becomes an infinite loop for inputs larger than LONG_MAX/2). What seems most appropriate to avoid that is to bound the initial table size request to work_mem. This fixes bug #6035 reported by Daniel Schreiber. Although the reported case only occurs back to 8.4 since it involves WITH RECURSIVE, I think it's a good idea to install the defenses in all supported branches.
* Remove spurious underscore in name of isolation tester on MSVC.Andrew Dunstan2011-05-22
|
* Use the right pgsql for isolation tests.Andrew Dunstan2011-05-22
|
* Make plpgsql provide the typmods for its variables to the main parser.Tom Lane2011-05-22
| | | | | | | | | | | | | | | | Historically we didn't do this, even though we had the information, because plpgsql passed its Params via SPI APIs that only include type OIDs not typmods. Now that plpgsql uses parser callbacks to create Params, it's easy to insert the right typmod. This should generally result in lower surprise factors, because a plpgsql variable that is declared with a typmod will now work more like a table column with the same typmod. In particular it's the "right" way to fix bug #6020, in which plpgsql's attempt to return an anonymous record type is defeated by stricter record-type matching checks that were added in 9.0. However, it's not impossible that this could result in subtle behavioral changes that could break somebody's existing plpgsql code, so I'm afraid to back-patch this change into released branches. In those branches we'll have to lobotomize the record-type checks instead.
* Message style improvementsPeter Eisentraut2011-05-22
|
* Message improvementPeter Eisentraut2011-05-22
|
* Pull up isReset flag from AllocSetContext to MemoryContext struct. ThisHeikki Linnakangas2011-05-21
| | | | | | | | | avoids the overhead of one function call when calling MemoryContextReset(), and it seems like the isReset optimization would be applicable to any new memory context we might invent in the future anyway. This buys back the overhead I just added in previous patch to always call MemoryContextReset() in ExecScan, even when there's no quals or projections.
* Reset per-tuple memory context between every row in a scan node, even whenHeikki Linnakangas2011-05-21
| | | | | | there's no quals or projections. Currently this only matters for foreign scans, as none of the other scan nodes litter the per-tuple memory context when there's no quals or projections.
* In binary-upgrade mode, dump dropped attributes of composite types.Heikki Linnakangas2011-05-21
| | | | Noah Misch
* Message style improvementsPeter Eisentraut2011-05-21
|
* Rename pg_dump --no-security-label to --no-security-labelsPeter Eisentraut2011-05-19
| | | | Other similar options also use the plural form.
* Fix untranslatable assembly of libpq connection failure messagePeter Eisentraut2011-05-19
| | | | | | | Even though this only affects the insertion of a parenthesized word, it's unwise to assume that parentheses can pass through untranslated. And in any case, the new version is clearer in the code and for translators.
* Consistent spacing for lengthy error messagesPeter Eisentraut2011-05-19
| | | | | | Also, we removed the display of the current value of max_connections/MaxBackends from some messages earlier, because it was confusing, so do that in the remaining one as well.
* Add example for replication in pg_hba.confMagnus Hagander2011-05-19
| | | | Selena Deckelmann
* Fix race condition in CheckTargetForConflictsIn.Robert Haas2011-05-19
| | | | Dan Ports