aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
...
* Fix a small memory leak in ExecReScanAgg() in the hashed aggregation case.Neil Conway2008-10-16
| | | | | | | In the previous coding, the list of columns that needed to be hashed on was allocated in the per-query context, but we reallocated every time the Agg node was rescanned. Since this information doesn't change over a rescan, just construct the list of columns once during ExecInitAgg().
* Fix SPI_getvalue and SPI_getbinval to range-check the given attribute numberTom Lane2008-10-16
| | | | | | | | | | | | | | according to the TupleDesc's natts, not the number of physical columns in the tuple. The previous coding would do the wrong thing in cases where natts is different from the tuple's column count: either incorrectly report error when it should just treat the column as null, or actually crash due to indexing off the end of the TupleDesc's attribute array. (The second case is probably not possible in modern PG versions, due to more careful handling of inheritance cases than we once had. But it's still a clear lack of robustness here.) The incorrect error indication is ignored by all callers within the core PG distribution, so this bug has no symptoms visible within the core code, but it might well be an issue for add-on packages. So patch all the way back.
* Fix omission of DiscardStmt in GetCommandLogLevel, per report from HubertTom Lane2008-10-10
| | | | | Depesz Lubaczewski. In HEAD, also move a couple of other cases to make the code ordering match up with ProcessUtility.
* Optional arguments should be optional.Michael Meskes2008-10-10
|
* Fix overly tense optimization of PLpgSQL_func_hashkey: we must representTom Lane2008-10-09
| | | | | | | | | | | | | | | the isTrigger state explicitly, not rely on nonzero-ness of trigrelOid to indicate trigger-hood, because trigrelOid will be left zero when compiling for validation. The (useless) function hash entry built by the validator was able to match an ordinary non-trigger call later in the same session, thereby bypassing the check that is supposed to prevent such a call. Per report from Alvaro. It might be worth suppressing the useless hash entry altogether, but that's a bigger change than I want to consider back-patching. Back-patch to 8.0. 7.4 doesn't have the problem because it doesn't have validation mode.
* Fix crash in bytea-to-XML mapping when the source value is toasted.Tom Lane2008-10-09
| | | | | Report and fix by Michael McMaster. Some minor code beautification by me, also avoid memory leaks in the special-case paths.
* Force a checkpoint in CREATE DATABASE before starting to copy the files,Heikki Linnakangas2008-10-09
| | | | | | | | | | | | | to process any pending unlinks for the source database. Before, if you dropped a relation in the template database just before CREATE DATABASE, and a checkpoint happened during copydir(), the checkpoint might delete a file that we're just about to copy, causing lstat() in copydir() to fail with ENOENT. Backpatch to 8.3, where the pending unlinks were introduced. Per report by Matthew Wakeling and analysis by Tom Lane.
* When a relation is moved to another tablespace, we can't assume that we canHeikki Linnakangas2008-10-07
| | | | | | | | | | | | | | | | | use the old relfilenode in the new tablespace. There might be another relation in the new tablespace with the same relfilenode, so we must generate a fresh relfilenode in the new tablespace. The 8.3 patch to let deleted relation files linger as zero-length files until the next checkpoint made this more obvious: moving a relation from one table space another, and then back again, caused a collision with the lingering file. Back-patch to 8.1. The issue is present in 8.0 as well, but it doesn't seem worth fixing there, because we didn't have protection from OID collisions after OID wraparound before 8.1. Report by Guillaume Lelarge.
* Fix improper display of fractional seconds in interval valuesTom Lane2008-10-02
| | | | | | when using --enable-integer-datetimes and a non-ISO datestyle. Ron Mayer
* Link libpq with libgssapi if configure finds it, asMagnus Hagander2008-10-01
| | | | | | required by at least NetBSD. Markus Schaaf
* Recent patches to pg_ctl broke "pg_ctl restart" for the case where noTom Lane2008-09-30
| | | | | command-line options had been given to the postmaster; and just plain broke it altogether in 8.1 and 8.0. Per report from KaiGai Kohei.
* Compare escaped chars case insensitively for ILIKE - per gripe from TGL.Andrew Dunstan2008-09-27
|
* Fix more problems with rewriter failing to set Query.hasSubLinks when insertingTom Lane2008-09-24
| | | | | | | | | | a SubLink expression into a rule query. We missed cases where the original query contained a sub-SELECT in a function in FROM, a multi-row VALUES list, or a RETURNING list. Per bug #4434 from Dean Rasheed and subsequent investigation. Back-patch to 8.1; older releases don't have the issue because they didn't try to be smart about setting hasSubLinks only when needed.
* Make sure pg_control is opened in binary mode, to dealMagnus Hagander2008-09-24
| | | | | | | with situtations when the file contains an EOF maker (0x1A) on Windows. ITAGAKI Takahiro
* Mark SessionReplicationRole as PGDLLIMPORT so itMagnus Hagander2008-09-19
| | | | | | can be used from Slony functions. Per report from Hiroshi Saito.
* tag for 8.3.4REL8_3_4Marc G. Fournier2008-09-19
|
* Update time zone data files to tzdata release 2008f (DST law changes inTom Lane2008-09-17
| | | | Argentina, Bahamas, Brazil, Mauritius, Morocco, Pakistan, Palestine, Paraguay).
* Widen the nLocks counts in local lock tables from int to int64. ThisTom Lane2008-09-16
| | | | | | | | | | | | | forestalls potential overflow when the same table (or other object, but usually tables) is accessed by very many successive queries within a single transaction. Per report from Michael Milligan. Back-patch to 8.0, which is as far back as the patch conveniently applies. There have been no reports of overflow in pre-8.3 releases, but clearly the risk existed all along. (Michael's report suggests that 8.3 may consume lock counts faster than prior releases, but with no test case to look at it's hard to be sure about that. Widening the counts seems a good future-proofing measure in any event.)
* Fix multiple memory leaks in xml_out(). Per report from Matt Magoffin.Tom Lane2008-09-16
|
* Fix caching of foreign-key-checking queries so that when a replan is needed,Tom Lane2008-09-15
| | | | | | | | we regenerate the SQL query text not merely the plan derived from it. This is needed to handle contingencies such as renaming of a table or column used in an FK. Pre-8.3, such cases worked despite the lack of replanning (because the cached plan needn't actually change), so this is a regression. Per bug #4417 from Benjamin Bihler.
* Skip opfamily check in eclass_matches_any_index() when the index isn't aTom Lane2008-09-12
| | | | | | | | | btree. We can't easily tell whether clauses generated from the equivalence class could be used with such an index, so just assume that they might be. This bit of over-optimization prevented use of non-btree indexes for nestloop inner indexscans, in any case where the join uses an equality operator that is also a btree operator --- which in particular is typically true for hash indexes. Noted while trying to test the current hash index patch.
* Initialize the minimum frozen Xid in vac_update_datfrozenxid usingAlvaro Herrera2008-09-11
| | | | | | | | | | | | | | | | | | | | GetOldestXmin() instead of RecentGlobalXmin; this is safer because we do not depend on the latter being correctly set elsewhere, and while it is more expensive, this code path is not performance-critical. This is a real risk for autovacuum, because it can execute whole cycles without doing a single vacuum, which would mean that RecentGlobalXmin would stay at its initialization value, FirstNormalTransactionId, causing a bogus value to be inserted in pg_database. This bug could explain some recent reports of failure to truncate pg_clog. At the same time, change the initialization of RecentGlobalXmin to InvalidTransactionId, and ensure that it's set to something else whenever it's going to be used. Using it as FirstNormalTransactionId in HOT page pruning could incur in data loss. InitPostgres takes care of setting it to a valid value, but the extra checks are there to prevent "special" backends from behaving in unusual ways. Per Tom Lane's detailed problem dissection in 29544.1221061979@sss.pgh.pa.us
* Avoid using sprintf() for a simple octal conversion in PQescapeByteaInternal.Tom Lane2008-09-10
| | | | | Improves performance, per suggestion from Rudolf Leitgeb (bug #4414). The backend did this right already, but not libpq.
* Fix plpgsql's exec_move_row() to supply valid type OIDs to exec_assign_value()Tom Lane2008-09-01
| | | | | | | | | | whenever possible, as per bug report from Oleg Serov. While at it, reorder the operations in the RECORD case to avoid possible palloc failure while the variable update is only partly complete. Back-patch as far as 8.1. Although the code of the particular function is similar in 8.0, 8.0's support for composite fields in rows is sufficiently broken elsewhere that it doesn't seem worth fixing this.
* HeapTupleHeaderAdjustCmax made the incorrect assumption that the rawHeikki Linnakangas2008-09-01
| | | | | | | | | command id is the cmin, when it can in fact be a combo cid. That made rows incorrectly invisible to a transaction where a tuple was deleted by multiple aborted subtransactions. Report and patch Karl Schnaitter. Back-patch to 8.3, where combo cids was introduced.
* Fix bug in original implementation of xmlserialize(): if user specifiesTom Lane2008-08-29
| | | | | | | | a target type that isn't acceptable, the code failed to raise the proper error. The result instead was to return a NULL expression tree, which in a quick test led to a 'cache lookup failed for type 0' error later. Patch 8.3 only --- I fixed this in HEAD as part of recent locations patch.
* Teach eval_const_expressions() to simplify an ArrayCoerceExpr to a constantTom Lane2008-08-26
| | | | | | | | when its input is constant and the element coercion function is immutable (or nonexistent, ie, binary-coercible case). This is an oversight in the 8.3 implementation of ArrayCoerceExpr, and its result is that certain cases involving IN or NOT IN with constants don't get optimized as they should be. Per experimentation with an example from Ow Mun Heng.
* Fix possible duplicate tuples while GiST scan. Now page is processedTeodor Sigaev2008-08-23
| | | | | | | | | at once and ItemPointers are collected in memory. Remove tuple's killing by killtuple() if tuple was moved to another page - it could produce unaceptable overhead. Backpatch up to 8.1 because the bug was introduced by GiST's concurrency support.
* Fixed incorrect argument handling in SET command if argument is a variable.Michael Meskes2008-08-20
|
* Make libpq on windows not try to send chunks larger than 64Kb.Magnus Hagander2008-08-20
| | | | | | | | | Per Microsoft knowledge base article Q201213, early versions of Windows fail when we do this. Later versions of Windows appear to have a higher limit than 64Kb, but do still fail on large sends, so we unconditionally limit it for all versions. Patch from Tom Lane.
* Fix pg_dump/pg_restore's ExecuteSqlCommand() to behave suitably if PQexecTom Lane2008-08-16
| | | | | | | returns NULL instead of a PGresult. The former coding would fail, which is OK, but it neglected to give you the PQerrorMessage that might tell you why. In the oldest branches, there was another problem: it'd sometimes report PQerrorMessage from the wrong connection.
* Synchronize Borland libpq makefile to match MSVC. Backpatch to 8.3.X.Bruce Momjian2008-08-16
|
* Fix pull_up_simple_union_all to copy all rtable entries from child subquery toHeikki Linnakangas2008-08-14
| | | | | | | parent, not only those with RangeTblRefs. We need them in ExecCheckRTPerms. Report by Brendan O'Shea. Back-patch to 8.2, where pull_up_simple_union_all was introduced.
* Fix corner-case bug introduced with HOT: if REINDEX TABLE pg_class (or aTom Lane2008-08-10
| | | | | | | | | | | | REINDEX DATABASE including same) is done before a session has done any other update on pg_class, the pg_class relcache entry was left with an incorrect setting of rd_indexattr, because the indexed-attributes set would be first demanded at a time when we'd forced a partial list of indexes into the pg_class entry, and it would remain cached after that. This could result in incorrect decisions about HOT-update safety later in the same session. In practice, since only pg_class_relname_nsp_index would be missed out, only ALTER TABLE RENAME and ALTER TABLE SET SCHEMA could trigger a problem. Per report and test case from Ondrej Jirman.
* Install checks in executor startup to ensure that the tuples produced by anTom Lane2008-08-08
| | | | | | | | | | | | INSERT or UPDATE will match the target table's current rowtype. In pre-8.3 releases inconsistency can arise with stale cached plans, as reported by Merlin Moncure. (We patched the equivalent hazard on the SELECT side in Feb 2007; I'm not sure why we thought there was no risk on the insertion side.) In 8.3 and HEAD this problem should be impossible due to plan cache invalidation management, but it seems prudent to make the check anyway. Back-patch as far as 8.0. 7.x versions lack ALTER COLUMN TYPE, so there seems no way to abuse a stale plan comparably.
* Do not allow Unique nodes to be scanned backwards. The code claimed that itTom Lane2008-08-05
| | | | | | | would work, but in fact it didn't return the same rows when moving backwards as when moving forwards. This would have no visible effect in a DISTINCT query (at least assuming the column datatypes use a strong definition of equality), but it gave entirely wrong answers for DISTINCT ON queries.
* Fix copy-and-pasteo that's causing pg_regress to lie about which file it can'tTom Lane2008-08-03
| | | | | | read when the --temp-config argument is bad. Noted while wondering why buildfarm member dungbeetle is failing ... this isn't why, but it is why the error report isn't very helpful ...
* Fix parsing of LDAP URLs so it doesn't reject spaces in the "suffix" part.Tom Lane2008-07-24
| | | | Per report from César Miguel Oliveira Alves.
* Ratchet up patch to improve autovacuum wraparound messages.Alvaro Herrera2008-07-23
| | | | Simon Riggs
* Publish more openly the fact that autovacuum is working for wraparoundAlvaro Herrera2008-07-21
| | | | | | protection. Simon Riggs
* Add MSVC++ debug libraries to .cvsignore.Alvaro Herrera2008-07-17
|
* Avoid crashing when a table is deleted while we're on the process of checkingAlvaro Herrera2008-07-17
| | | | | | it. This is a stripped down version of the patch applied to HEAD. Per report from Tom Lane based on buildfarm evidence.
* Fix an oversight in the original implementation of performMultipleDeletions():Tom Lane2008-07-11
| | | | | | | | | | | | the alreadyDeleted list has to be passed down through deleteDependentObjects(), else objects that are deleted via auto/internal dependencies don't get reported back up to performMultipleDeletions(). Depending on the visitation order, this could cause the code to try to delete an already-deleted object, leading to strange errors in DROP OWNED (typically "cache lookup failed for relation NNNNN" or similar). Per bug #4289. Patch for back branches only. This code has recently been rewritten in HEAD, and doesn't have this particular bug anymore.
* Fix mis-calculation of extParam/allParam sets for plan nodes, as seen inTom Lane2008-07-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | bug #4290. The fundamental bug is that masking extParam by outer_params, as finalize_plan had been doing, caused us to lose the information that an initPlan depended on the output of a sibling initPlan. On reflection the best thing to do seemed to be not to try to adjust outer_params for this case but get rid of it entirely. The only thing it was really doing for us was to filter out param IDs associated with SubPlan nodes, and that can be done (with greater accuracy) while processing individual SubPlan nodes in finalize_primnode. This approach was vindicated by the discovery that the masking method was hiding a second bug: SS_finalize_plan failed to remove extParam bits for initPlan output params that were referenced in the main plan tree (it only got rid of those referenced by other initPlans). It's not clear that this caused any real problems, given the limited use of extParam by the executor, but it's certainly not what was intended. I originally thought that there was also a problem with needing to include indirect dependencies on external params in initPlans' param sets, but it turns out that the executor handles this correctly so long as the depended-on initPlan is earlier in the initPlans list than the one using its output. That seems a bit of a fragile assumption, but it is true at the moment, so I just documented it in some code comments rather than making what would be rather invasive changes to remove the assumption. Back-patch to 8.1. Previous versions don't have the case of initPlans referring to other initPlans' outputs, so while the existing logic is still questionable for them, there are not any known bugs to be fixed. So I'll refrain from changing them for now.
* Fix performance bug in write_syslog(): the code to preferentially break theTom Lane2008-07-08
| | | | | | | | | | log message at newlines cost O(N^2) for very long messages with few or no newlines. For messages in the megabyte range this became the dominant cost. Per gripe from Achilleas Mantzios. Patch all the way back, since this is a safe change with no portability risks. I am also thinking of increasing PG_SYSLOG_LIMIT, but that should be done separately.
* Fix estimate_num_groups() to assume that GROUP BY expressions yielding booleanTom Lane2008-07-07
| | | | | | | | | results always contribute two groups, regardless of the expression contents. This is very substantially more accurate than the regular heuristic for certain boolean tests like "col IS NULL". Per gripe from Sam Mason. Back-patch to all supported releases, since the behavior of estimate_num_groups() hasn't changed all that much since 7.4.
* Fix AT TIME ZONE (in all three variants) so that we first try to interpretTom Lane2008-07-07
| | | | | | | | | | | | | | | | the timezone argument as a timezone abbreviation, and only try it as a full timezone name if that fails. The zic database has four zones (CET, EET, MET, WET) that are full daylight-savings zones and yet have names that are the same as their abbreviations for standard time, resulting in ambiguity. In the timestamp input functions we resolve the ambiguity by preferring the abbreviation, and AT TIME ZONE should work the same way. (No functionality is lost because the zic database also has other names for these zones, eg Europe/Zurich.) Per gripe from Jaromir Talir. Backpatch to 8.1. Older releases did not have the issue because AT TIME ZONE only accepted abbreviations not zone names. (Thus, this patch also arguably fixes a compatibility botch introduced at 8.1: in ambiguous cases we now behave the same as 8.0 did.)
* Prevent integer overflows during units conversion when displaying a GUCTom Lane2008-07-06
| | | | | | | | | | | | variable that has units. Per report from Stefan Kaltenbrunner. Backport to 8.2. I also backported my patch of 2007-06-21 that prevented comparable overflows on the input side, since that now seems to have enough field track record to be back-patched safely. That patch included addition of hints listing the available unit names, which I did not bother to strip out of it --- this will make a little more work for the translators, but they can copy the translation from 8.3, and anyway an untranslated hint is better than no hint.
* Fix a couple of bugs in win32 shmem name generation:Magnus Hagander2008-07-04
| | | | | * Don't cut off the prefix. With this fix, it's again readable. * Properly store it in the Global namespace as intended.
* Fix transaction-lifespan memory leak in xpath(). Report by Matt Magoffin,Tom Lane2008-07-03
| | | | fix by Kris Jurka.