aboutsummaryrefslogtreecommitdiff
path: root/src/backend
Commit message (Collapse)AuthorAge
* Fix cost_nestloop and cost_hashjoin to model the behavior of semi and antiTom Lane2009-05-09
| | | | | | joins a bit better, ie, understand the differing cost functions for matched and unmatched outer tuples. There is more that could be done in cost_hashjoin but this already helps a great deal. Per discussions with Robert Haas.
* Add an option to AlterTableCreateToastTable() to allow its caller to forceTom Lane2009-05-07
| | | | | | | | a toast table to be built, even if the sum-of-column-widths calculation indicates one isn't needed. This is needed by pg_migrator because if the old table has a toast table, we have to migrate over the toast table since it might contain some live data, even though subsequent column drops could mean that no recently-added rows could require toasting.
* Ooops ... make_outerjoininfo wasn't actually enforcing the join orderTom Lane2009-05-07
| | | | | | restrictions specified for semijoins in optimizer/README, to wit that you can't reassociate outer joins into or out of the RHS of a semijoin. Per report from Heikki.
* Request XLOG switch before writing checkpoint in pg_start_backup(). OtherwiseHeikki Linnakangas2009-05-07
| | | | | | | | | | | | | | | | | | you can end up with an unrecoverable backup if you start a new base backup right after finishing archive recovery. In that scenario, the redo pointer of the checkpoint that pg_start_backup() writes points to the XLOG segment where the timeline-changing end-of-archive-recovery checkpoint is. The beginning of that segment contains pages with the old timeline ID, and we don't accept that in recovery unless we find a history file covering the old timeline ID. If you omit pg_xlog from the base backup and clear the archive directory before starting the backup, there will be no such history file available. The bug is present in all versions since PITR was introduced in 8.0, but I'm back-patching only back to 8.2. Earlier versions didn't have XLOG switch records, making this fix unfeasible. Given the lack of reports until now, it doesn't seem worthwhile to spend more effort to fix 8.0 and 8.1. Per report and suggestion by Mikael Krantz
* Tweak distribute_qual_to_rels so that when we decide a pseudoconstant qualTom Lane2009-05-06
| | | | | | | | | | | | | | can be pushed to the top of the join tree, we update both the relids and qualscope variables to keep them in sync. This prevents a possible later failure of an Assert clause, and affects nothing else since qualscope isn't used later except for that Assert. At the moment the Assert shouldn't be reachable when we've pushed the qual up; but this is cheap insurance, and it's more sensible anyway in terms of the overall logic of the routine. Per analysis of a bug report from Stefan Huehner. I'm not back-patching this since it's just future-proofing; but if anyone gets tempted to change check_outerjoin_delay again in the back branches, this might be needed.
* Modify CREATE DATABASE to enforce that the source database's encoding settingTom Lane2009-05-06
| | | | | | | | | | | | must be used for the new database, except when copying from template0. This is the same rule that we now enforce for locale settings, and it has the same motivation: databases other than template0 might contain data that would be invalid according to a different setting. This represents another step in a continuing process of locking down ways in which encoding violations could occur inside the backend. Per discussion of a few days ago. In passing, fix pre-existing breakage of mbregress.sh, and fix up a couple of ereport() calls in dbcommands.c that failed to specify sqlstate codes.
* Tweak a comment to agree a bit better with the new dispensation thatTom Lane2009-05-05
| | | | locales are database-wide, not server-wide.
* Minor improvement: avoid assuming that GetLastError value cannot beTom Lane2009-05-05
| | | | affected by CloseHandle() or Sleep().
* Make new complaint about unsafe Unicode literals include an error location.Tom Lane2009-05-05
| | | | Every other ereport in scan.l has one, this should too.
* Install an atexit(2) callback that ensures that proc_exit's cleanup processingTom Lane2009-05-05
| | | | | | | | | | will still be performed if something in a backend process calls exit() directly, instead of going through proc_exit() as we prefer. This is a second response to the issue that we might load third-party code that doesn't know it should not call exit(). Such a call will now cause a reasonably graceful backend shutdown, if possible. (Of course, if the reason for the exit() call is out-of-memory or some such, we might not be able to recover, but at least we will try.)
* Install a "dead man switch" to allow the postmaster to detect cases whereTom Lane2009-05-05
| | | | | | | | | | | | | | | | | | | | | | | | | | a backend has done exit(0) or exit(1) without having disengaged itself from shared memory. We are at risk for this whenever third-party code is loaded into a backend, since such code might not know it's supposed to go through proc_exit() instead. Also, it is reported that under Windows there are ways to externally kill a process that cause the status code returned to the postmaster to be indistinguishable from a voluntary exit (thank you, Microsoft). If this does happen then the system is probably hosed --- for instance, the dead session might still be holding locks. So the best recovery method is to treat this like a backend crash. The dead man switch is armed for a particular child process when it acquires a regular PGPROC, and disarmed when the PGPROC is released; these should be the first and last touches of shared memory resources in a backend, or close enough anyway. This choice means there is no coverage for auxiliary processes, but I doubt we need that, since they shouldn't be executing any user-provided code anyway. This patch also improves the management of the EXEC_BACKEND ShmemBackendArray array a bit, by reducing search costs. Although this problem is of long standing, the lack of field complaints seems to mean it's not critical enough to risk back-patching; at least not till we get some more testing of this mechanism.
* Insert CHECK_FOR_INTERRUPTS() calls into btree and hash index scans at theTom Lane2009-05-05
| | | | | | | | | | | | | | | | | | | points where we step right or left to the next page. This should ensure reasonable response time to a query cancel request during an unsuccessful index scan, as seen in recent gripe from Marc Cousin. It's a bit trickier than it might seem at first glance, because CHECK_FOR_INTERRUPTS() is a no-op if executed while holding a buffer lock. So we have to do it just at the point where we've dropped one page lock and not yet acquired the next. Remove CHECK_FOR_INTERRUPTS calls at the top level of btgetbitmap and hashgetbitmap, since they're pointless given the added checks. I think that GIST is okay already --- at least, there's a CHECK_FOR_INTERRUPTS at a plausible-looking place in gistnext(). I don't claim to know GIN well enough to try to poke it for this, if indeed it has a problem at all. This is a pre-existing issue, but in view of the lack of prior complaints I'm not going to risk back-patching.
* Update comment for _bt_relandgetbuf.Tom Lane2009-05-05
|
* Disable the use of Unicode escapes in string constants (U&'') whenPeter Eisentraut2009-05-05
| | | | standard_conforming_strings is not on, for security reasons.
* Avoid integer overflow in the loop that extracts histogram entries fromTom Lane2009-05-05
| | | | | | ANALYZE's total sample. The original coding is at risk of overflow for statistics targets exceeding about 2675; this was not a problem before 8.4 but it is now. Per bug #4793 from Dennis Noordsij.
* Make the win32 shared memory code try 10 times instead of one ifMagnus Hagander2009-05-05
| | | | | | | it fails because the shared memory segment already exists. This means it can take up to 10 seconds before it reports the error if it *does* exist, but hopefully it will make the system capable of restarting even when the server is under high load.
* Call SetLastError(0) before calling the file mapping functionsMagnus Hagander2009-05-04
| | | | | | | to make sure that the error code is reset, as a precaution in case the API doesn't properly reset it on success. This could be necessary, since we check the error value even if the function doesn't fail for specific success cases.
* Fix missed usage of DLNewElem()Tom Lane2009-05-04
|
* Avoid a memory allocation in the backend startup code, to avoid having to checkAlvaro Herrera2009-05-04
| | | | | whether it failed. Modelled after catcache.c's usage of DlList, per suggestion from Tom.
* Fix assign_pgstat_temp_directory() to ensure the directory path isTom Lane2009-05-03
| | | | canonicalized. Avoid the need to elog(FATAL) on out-of-memory.
* Update UTF-8 <--> EUC_KR, JOHAB, UHC mappings.Tatsuo Ishii2009-05-03
| | | | Patch contributed by Chuck McDevitt
* Install some simple defenses in postmaster startup to help ensure a usefulTom Lane2009-05-02
| | | | | | | | | | | | error message if the installation directory layout is messed up (or at least, something more useful than the behavior exhibited in bug #4787). During postmaster startup, check that get_pkglib_path resolves as a readable directory; and if ParseTzFile() fails to open the expected timezone abbreviation file, check the possibility that the directory is missing rather than just the specified file. In case of either failure, issue a hint suggesting that the installation is broken. These two checks cover the lib/ and share/ trees of a full installation, which should take care of most scenarios where a sysadmin decides to get cute.
* When checking for datetime field overflow, we should allow a fractional-secondTom Lane2009-05-01
| | | | | | | | | | | | | | part that rounds up to exactly 1.0 second. The previous coding rejected input like "00:12:57.9999999999999999999999999999", with the exact number of nines needed to cause failure varying depending on float-timestamp option and possibly on platform. Obviously this should round up to the next integral second, if we don't have enough precision to distinguish the value from that. Per bug #4789 from Robert Kruus. In passing, fix a missed check for fractional seconds in one copy of the "is it greater than 24:00:00" code. Broken all the way back, so patch all the way back.
* Improve pull_up_subqueries logic so that it doesn't insert unnecessaryTom Lane2009-04-28
| | | | | | | PlaceHolderVar nodes in join quals appearing in or below the lowest outer join that could null the subquery being pulled up. This improves the planner's ability to recognize constant join quals, and probably helps with detection of common sort keys (equivalence classes) as well.
* Move SERVER to the right place in the alphabetically sorted keyword list.Heikki Linnakangas2009-04-28
|
* Fix the handling of sub-SELECTs appearing in the arguments of an outer-levelTom Lane2009-04-25
| | | | | | | | | | | | | | | | | aggregate function. By definition, such a sub-SELECT cannot reference any variables of query levels between itself and the aggregate's semantic level (else the aggregate would've been assigned to that lower level instead). So the correct, most efficient implementation is to treat the sub-SELECT as being a sub-select of that outer query level, not the level the aggregate syntactically appears in. Not doing so also confuses the heck out of our parameter-passing logic, as illustrated in bug report from Daniel Grace. Fortunately, we were already copying the whole Aggref expression up to the outer query level, so all that's needed is to delay SS_process_sublinks processing of the sub-SELECT until control returns to the outer level. This has been broken since we introduced spec-compliant treatment of outer aggregates in 7.4; so patch all the way back.
* Fix some more 'variable may be used uninitialized' warnings from gcc 4.4.Tom Lane2009-04-24
|
* Move gettext encoding names into encnames.c, so we only have one place to ↵Magnus Hagander2009-04-24
| | | | | | update. Per discussion.
* Suppress some 'variable may be used uninitialized' warnings from gcc 4.4.Tom Lane2009-04-23
|
* Don't use the result of strcmp as if it were a boolean.Tom Lane2009-04-23
| | | | A service of your local coding style police.
* varstr_cmp and any comparison function that piggybacks on it can returnHeikki Linnakangas2009-04-23
| | | | | | | any negative or positive number, not just -1 or 1. Fix comment on varstr_cmp and citext test case accordingly. As pointed out by Zdenek Kotala, and buildfarm member gothic moth.
* Change the default value of max_prepared_transactions to zero, and addTom Lane2009-04-23
| | | | | | | | | | | | | | | | | | | | documentation warnings against setting it nonzero unless active use of prepared transactions is intended and a suitable transaction manager has been installed. This should help to prevent the type of scenario we've seen several times now where a prepared transaction is forgotten and eventually causes severe maintenance problems (or even anti-wraparound shutdown). The only real reason we had the default be nonzero in the first place was to support regression testing of the feature. To still be able to do that, tweak pg_regress to force a nonzero value during "make check". Since we cannot force a nonzero value in "make installcheck", add a variant regression test "expected" file that shows the results that will be obtained when max_prepared_transactions is zero. Also, extend the HINT messages for transaction wraparound warnings to mention the possibility that old prepared transactions are causing the problem. All per today's discussion.
* After archive recovery, mark the last WAL segment from the parent timelineHeikki Linnakangas2009-04-22
| | | | | | | ready for archival. It was marked at the next checkpoint anyway, but waiting for the next checkpoint is an unnecessary delay. Fujii Masao
* Remove the long-obsolete homebrew dl*() functions for AIX, in favor of justTom Lane2009-04-21
| | | | | | | | | using the system functions all the time. (These files are now just copies of the osf.* files.) The homebrew functions were not getting used anyway on AIX versions that have dlopen(), that is 4.3 and up, so they are not needed on any AIX that is even remotely supported by the vendor anymore. We'd have probably left them here anyway, except some questions were raised about the copyright.
* Fix obsolete cross-reference (this file isn't called alpha.c anymore)Tom Lane2009-04-21
|
* Rethink the idea of having plpgsql depend on parser/gram.h. Aside from theTom Lane2009-04-19
| | | | | | | | | fact that this is breaking the MSVC build, it's probably not really a good idea to expand the dependencies of gram.h any further than the core parser; for instance the value of SCONST might depend on which bison version you'd built with. Better to expose an additional call point in parser.c, so move what I had put into pl_funcs.c into parser.c. Also PGDLLIMPORT'ify the reference to standard_conforming_strings, per buildfarm results.
* Fix de-escaping checks so that we will reject \000 as well as other invalidlyTom Lane2009-04-19
| | | | encoded sequences. Per discussion of a couple of days ago.
* Fix estimate_num_groups() to not fail on PlaceHolderVars, per report fromTom Lane2009-04-19
| | | | | | | | | Stefan Kaltenbrunner. The most reasonable behavior (at least for the near term) seems to be to ignore the PlaceHolderVar and examine its argument instead. In support of this, change the API of pull_var_clause() to allow callers to request recursion into PlaceHolderVars. Currently estimate_num_groups() is the only customer for that behavior, but where there's one there may be others.
* Bump disable_cost up from 1e8 to 1e10, per gripe from Kris Jurka.Tom Lane2009-04-17
|
* Fix planner to restore its previous level of intelligence about pushingTom Lane2009-04-16
| | | | | | | | | | | | | | | | | | | | constants through full joins, as in select * from tenk1 a full join tenk1 b using (unique1) where unique1 = 42; which should generate a fairly cheap plan where we apply the constraint unique1 = 42 in each relation scan. This had been broken by my patch of 2008-06-27, which is now reverted in favor of a more invasive but hopefully less incorrect approach. That patch was meant to prevent incorrect extraction of OR'd indexclauses from OR conditions above an outer join. To do that correctly we need more information than the outerjoin_delay flag can provide, so add a nullable_relids field to RestrictInfo that records exactly which relations are nulled by outer joins that are underneath a particular qual clause. A side benefit is that we can make the test in create_or_index_quals more specific: it is now smart enough to extract an OR'd indexclause into the outer side of an outer join, even though it must not do so in the inner side. The old coding couldn't distinguish these cases so it could not do either.
* Substitute extraneous underscores with spaces.Alvaro Herrera2009-04-15
|
* Add missing gettext calls around some strings. Also remove quotes around theAlvaro Herrera2009-04-15
| | | | %s that they expand to, per comment from Tom.
* Add missing periods.Alvaro Herrera2009-04-15
|
* Fix broken {xufailed} production that made HEAD fail onTom Lane2009-04-14
| | | | | | | | select u&42 from table-with-a-u-column; Also fix missing SET_YYLLOC() in the {dolqfailed} production that I suppose this was based on. The latter is a pre-existing bug, but the only effect is to misplace the error cursor by one token, so probably not worth backpatching.
* Translation updates for 8.4 betaPeter Eisentraut2009-04-09
|
* Remove SQL-compatibility function cardinality(). It is not exactly clearTom Lane2009-04-09
| | | | | | | how this ought to behave for multi-dimensional arrays. Per discussion, not having it at all seems better than having it with what might prove to be the wrong behavior. We can always add it later when we have consensus on the correct behavior.
* Treat EOF like \n for line-counting purposes in ParseConfigFile,Tom Lane2009-04-09
| | | | per bug #4752. Fujii Masao
* Allow leading and trailing spaces around NaN in numeric_in.Tom Lane2009-04-08
| | | | Sam Mason, rewritten a bit by Tom.
* XMLATTRIBUTES() should send the attribute values throughPeter Eisentraut2009-04-08
| | | | | map_sql_value_to_xml_value() instead of directly through the data type output function. This is per SQL standard, and consistent with XMLELEMENT().
* Oops, mustn't call textdomain() when compiling without --enable-nlsHeikki Linnakangas2009-04-08
|