aboutsummaryrefslogtreecommitdiff
path: root/src/backend
Commit message (Collapse)AuthorAge
* Fix overly-enthusiastic Assert in printing of Param reference expressions.Tom Lane2010-10-25
| | | | | | | | A NestLoopParam's value can only be a Var or Aggref, but this isn't the case in general for SubPlan parameters, so print_parameter_expr had better be prepared to cope. Brain fade in my recent patch to print the referenced expression instead of just printing $N for PARAM_EXEC Params. Per report from Pavel Stehule.
* Fix inline_set_returning_function() to preserve the invalItems list properly.Tom Lane2010-10-25
| | | | | | | | | This avoids a possible crash when inlining a SRF whose argument list contains a reference to an inline-able user function. The crash is quite reproducible with CLOBBER_FREED_MEMORY enabled, but would be less certain in a production build. Problem introduced in 9.0 by the named-arguments patch, which requires invoking eval_const_expressions() before we can try to inline a SRF. Per report from Brendan Jurd.
* Work around rounding misbehavior exposed by buildfarm.Tom Lane2010-10-25
|
* Allow new values to be added to an existing enum type.Tom Lane2010-10-24
| | | | | | | After much expenditure of effort, we've got this to the point where the performance penalty is pretty minimal in typical cases. Andrew Dunstan, reviewed by Brendan Jurd, Dean Rasheed, and Tom Lane
* Support suffix matching of host names in pg_hba.confPeter Eisentraut2010-10-24
| | | | | A name starting with a dot can be used to match a suffix of the actual host name (e.g., .example.com matches foo.example.com).
* Add semicolon, missed in previous patch. And update the keyword list inHeikki Linnakangas2010-10-22
| | | | the docs to reflect that OFF is now unreserved. Spotted by Tom Lane.
* Make OFF keyword unreserved. It's not hard to imagine wanting to use 'off'Heikki Linnakangas2010-10-22
| | | | | | | | as a variable or column name, and it's not reserved in recent versions of the SQL spec either. This became particularly annoying in 9.0, before that PL/pgSQL replaced variable names in queries with parameter markers, so it was possible to use OFF and many other backend parser keywords as variable names. Because of that, backpatch to 9.0.
* Improve handling of domains over arrays.Tom Lane2010-10-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch eliminates various bizarre behaviors caused by sloppy thinking about the difference between a domain type and its underlying array type. In particular, the operation of updating one element of such an array has to be considered as yielding a value of the underlying array type, *not* a value of the domain, because there's no assurance that the domain's CHECK constraints are still satisfied. If we're intending to store the result back into a domain column, we have to re-cast to the domain type so that constraints are re-checked. For similar reasons, such a domain can't be blindly matched to an ANYARRAY polymorphic parameter, because the polymorphic function is likely to apply array-ish operations that could invalidate the domain constraints. For the moment, we just forbid such matching. We might later wish to insert an automatic downcast to the underlying array type, but such a change should also change matching of domains to ANYELEMENT for consistency. To ensure that all such logic is rechecked, this patch removes the original hack of setting a domain's pg_type.typelem field to match its base type; the typelem will always be zero instead. In those places where it's really okay to look through the domain type with no other logic changes, use the newly added get_base_element_type function in place of get_element_type. catversion bumped due to change in pg_type contents. Per bug #5717 from Richard Huxton and subsequent discussion.
* Remove obsolete comment, per Josh Kupershmidt.Tom Lane2010-10-20
|
* Don't try to fetch database name when SetTransactionIdLimit() is executedTom Lane2010-10-20
| | | | | | | | | | | | outside a transaction. This repairs brain fade in my patch of 2009-08-30: the reason we had been storing oldest-database name, not OID, in ShmemVariableCache was of course to avoid having to do a catalog lookup at times when it might be unsafe. This error explains why Aleksandr Dushein is having trouble getting out of an XID wraparound state in bug #5718, though not how he got into that state in the first place. I suspect pg_upgrade is at fault there.
* Remove AtStart_Cache() call in CommandCounterIncrement().Alvaro Herrera2010-10-20
| | | | | | | | This call was present in the aboriginal code from Berkeley, and has never been touched; it may very well be that it was there to mask effects of bugs in other places and it may no longer be necessary. The removal has been foreseen in a code comment since 2007; this seems to be a good time to test this hypothesis.
* Fix incorrect generation of whole-row variables in planner.Tom Lane2010-10-19
| | | | | | | | | | | | | | A couple of places in the planner need to generate whole-row Vars, and were cutting corners by setting vartype = RECORDOID in the Vars, even in cases where there's an identifiable named composite type for the RTE being referenced. While we mostly got away with this, it failed when there was also a parser-generated whole-row reference to the same RTE, because the two Vars weren't equal() due to the difference in vartype. Fix by providing a subroutine the planner can call to generate whole-row Vars the same way the parser does. Per bug #5716 from Andrew Tipton. Back-patch to 9.0 where one of the bogus calls was introduced (the other one is new in HEAD).
* Unbreak comments on composite type attributes.Robert Haas2010-10-19
| | | | Report and diagnosis by Peter Eisentraut.
* Support key word 'all' in host column of pg_hba.confPeter Eisentraut2010-10-18
|
* Fix a passel of inappropriately-named global functions in GIN.Tom Lane2010-10-17
| | | | | | | | | | | | | | | | The GIN code has absolutely no business exporting GIN-specific functions with names as generic as compareItemPointers() or newScanKey(); that's just trouble waiting to happen. I got annoyed about this again just now and decided to fix it. This commit ensures that all global symbols defined in access/gin/ have names including "gin" or "Gin". There were a couple of cases, like names involving "PostingItem", where arguably the names were already sufficiently nongeneric; but I figured as long as I was risking creating merge problems for unapplied GIN patches I might as well impose a uniform policy. I didn't touch any static symbol names. There might be some places where it'd be appropriate to rename some static functions to match siblings that are exported, but I'll leave that for another time.
* Improve GIN indexscan cost estimation.Tom Lane2010-10-17
| | | | | | | | | | | | | The better estimate requires more statistics than we previously stored: in particular, counts of "entry" versus "data" pages within the index, as well as knowledge of the number of distinct key values. We collect this information during initial index build and update it during VACUUM, storing the info in new fields on the index metapage. No initdb is required because these fields will read as zeroes in a pre-existing index, and the new gincostestimate code is coded to behave (reasonably) sanely if they are zeroes. Teodor Sigaev, reviewed by Jan Urbanski, Tom Lane, and Itagaki Takahiro.
* Fix recent changes to not break non-IPV6-aware systems.Tom Lane2010-10-16
|
* Allow WITH clauses to be attached to INSERT, UPDATE, DELETE statements.Tom Lane2010-10-15
| | | | | | | | | | | | | | | | This is not the hoped-for facility of using INSERT/UPDATE/DELETE inside a WITH, but rather the other way around. It seems useful in its own right anyway. Note: catversion bumped because, although the contents of stored rules might look compatible, there's actually a subtle semantic change. A single Query containing a WITH and INSERT...VALUES now represents writing the WITH before the INSERT, not before the VALUES. While it's not clear that that matters to anyone, it seems like a good idea to have it cited in the git history for catversion.h. Original patch by Marko Tiikkaja, with updating and cleanup by Hitoshi Harada.
* Support host names in pg_hba.confPeter Eisentraut2010-10-15
| | | | Peter Eisentraut, reviewed by KaiGai Kohei and Tom Lane
* Change references to SQL/XML:2003 to :2008 and renumber sections accordinglyPeter Eisentraut2010-10-15
|
* Fix low-risk potential denial of service against RADIUS login.Magnus Hagander2010-10-15
| | | | | | | | | | | | | | | | Corrupt RADIUS responses were treated as errors and not ignored (which the RFC2865 states they should be). This meant that a user with unfiltered access to the network of the PostgreSQL or RADIUS server could send a spoofed RADIUS response to the PostgreSQL server causing it to reject a valid login, provided the attacker could also guess (or brute-force) the correct port number. Fix is to simply retry the receive in a loop until the timeout has expired or a valid (signed by the correct RADIUS server) packet arrives. Reported by Alan DeKok in bug #5687.
* Improve comment about ignoring 128 error code on Windows:Bruce Momjian2010-10-15
| | | | | * Microsoft reports it is related to mutex failure: * http://archives.postgresql.org/pgsql-hackers/2010-09/msg00790.php
* Support MergeAppend plans, to allow sorted output from append relations.Tom Lane2010-10-14
| | | | | | | | | This patch eliminates the former need to sort the output of an Append scan when an ordered scan of an inheritance tree is wanted. This should be particularly useful for fast-start cases such as queries with LIMIT. Original patch by Greg Stark, with further hacking by Hans-Jurgen Schonig, Robert Haas, and Tom Lane.
* Make startup process respond to signals to cancel waiting on latch.Simon Riggs2010-10-14
| | | | | | A tidy up for recently committed changes to startup latch. Fujii Masao
* Fix bug in comment of timeline history file.Simon Riggs2010-10-14
| | | | Fujii Masao
* Accept 'public' as a pseudo-role name in has_table_privilege() and friendsItagaki Takahiro2010-10-13
| | | | | | | to see if a particular privilege has been granted to PUBLIC. The issue was reported by Jim Nasby. Patch by Alvaro Herrera, and reviewed by KaiGai Kohei.
* Remove some unnecessary tests of pgstat_track_counts.Tom Lane2010-10-12
| | | | | | | | | | | | We may as well make pgstat_count_heap_scan() and related macros just count whenever rel->pgstat_info isn't null. Testing pgstat_track_counts buys nothing at all in the normal case where that flag is ON; and when it's OFF, the pgstat_info link will be null, so it's still a useless test. This change is unlikely to buy any noticeable performance improvement, but a cycle shaved is a cycle earned; and my investigations earlier today convinced me that we're down to the point where individual instructions in the inner execution loops are starting to matter.
* Fix assorted bugs in GIN's WAL replay logic.Tom Lane2010-10-11
| | | | | | | | | | | | | | The original coding was quite sloppy about handling the case where XLogReadBuffer fails (because the page has since been deleted). This would result in either "bad buffer id: 0" or an Assert failure during replay, if indeed the page were no longer there. In a couple of places it also neglected to check whether the change had already been applied, which would probably result in corrupted index contents. I believe that bug #5703 is an instance of the first problem. These issues could show up without replication, but only if you were unfortunate enough to crash between modification of a GIN index and the next checkpoint. Back-patch to 8.2, which is as far back as GIN has WAL support.
* Improve the planner's simplification of NOT constructs.Tom Lane2010-10-10
| | | | | | | | | | | | | | | | | This patch merges the responsibility for NOT-flattening into eval_const_expressions' processing. It wasn't done that way originally because prepqual.c is far older than eval_const_expressions. But putting this work into eval_const_expressions saves one pass over the qual trees, and in fact saves even more than that because we can exploit the knowledge that the subexpressions have already been recursively simplified. Doing it this way also lets us do it uniformly over all expressions, whereas prepqual.c formerly just did it at top level to save cycles. That should improve the planner's ability to recognize logically-equivalent constructs. While at it, also add the ability to fold a NOT into BooleanTest and NullTest constructs (the latter only for the scalar-datatype case). Per discussion of bug #5702.
* Support triggers on views.Tom Lane2010-10-10
| | | | | | | | | | | | | | | This patch adds the SQL-standard concept of an INSTEAD OF trigger, which is fired instead of performing a physical insert/update/delete. The trigger function is passed the entire old and/or new rows of the view, and must figure out what to do to the underlying tables to implement the update. So this feature can be used to implement updatable views using trigger programming style rather than rule hacking. In passing, this patch corrects the names of some columns in the information_schema.triggers view. It seems the SQL committee renamed them somewhere between SQL:99 and SQL:2003. Dean Rasheed, reviewed by Bernd Helmle; some additional hacking by me.
* Single-word clarification in postgresql.conf log_truncate_on_rotationBruce Momjian2010-10-08
| | | | comment.
* Fix sloppy usage of TRIGGER_FIRED_BEFORE/TRIGGER_FIRED_AFTER.Tom Lane2010-10-08
| | | | | | | | | | | | | | | | | | Various places were testing TRIGGER_FIRED_BEFORE() where what they really meant was !TRIGGER_FIRED_AFTER(), or vice versa. This needs to be cleaned up because there are about to be more than two possible states. We might want to note this in the 9.1 release notes as something for trigger authors to double-check. For consistency's sake I also changed some places that assumed that TRIGGER_FIRED_FOR_ROW and TRIGGER_FIRED_FOR_STATEMENT are necessarily mutually exclusive; that's not in immediate danger of breaking, but it's still sloppier than it should be. Extracted from Dean Rasheed's patch for triggers on views. I'm committing this separately since it's an identifiable separate issue, and is the only reason for the patch to touch most of these particular files.
* Improve logging in VACUUM FULL VERBOSE and CLUSTER VERBOSE.Tom Lane2010-10-07
| | | | | | | | | This patch resurrects some of the information that could be logged by the old, now-dead implementation of VACUUM FULL, in particular counts of live and dead tuples and the time taken for the table rebuild proper. There's still no logging about the ensuing index rebuilds, though. Itagaki Takahiro
* Eliminate some repetitive coding in tuplesort.c.Tom Lane2010-10-07
| | | | | | Use a macro LogicalTapeReadExact() to encapsulate the error check when we want to read an exact number of bytes from a "tape". Per a suggestion of Takahiro Itagaki.
* Teach CLUSTER to use seqscan-and-sort when it's faster than indexscan.Tom Lane2010-10-07
| | | | | | ... or at least, when the planner's cost estimates say it will be faster. Leonardo Francalanci, reviewed by Itagaki Takahiro and Tom Lane
* Reduce the memory requirement for large ispell dictionaries.Tom Lane2010-10-06
| | | | | | | | | | | This patch eliminates per-chunk palloc overhead for most small allocations needed in the representation of an ispell dictionary. This saves close to a factor of 2 on the current Czech ispell data. While it doesn't cover every last small allocation in the ispell code, we are at the point of diminishing returns, because about 95% of the allocations are covered already. Pavel Stehule, rather heavily revised by Tom
* Clean up temporary-memory management during ispell dictionary loading.Tom Lane2010-10-06
| | | | | | | | | | | Add explicit initialization and cleanup functions to spell.c, and keep all working state in the already-existing ISpellDict struct. This lets us get rid of a static variable along with some extremely shaky assumptions about usage of child memory contexts. This commit is just code beautification and has no impact on functionality or performance, but it opens the way to a less-grotty implementation of Pavel's memory-saving hack, which will follow shortly.
* Behave correctly if INSERT ... VALUES is decorated with additional clauses.Tom Lane2010-10-02
| | | | | | | | | | In versions 8.2 and up, the grammar allows attaching ORDER BY, LIMIT, FOR UPDATE, or WITH to VALUES, and hence to INSERT ... VALUES. But the special-case code for VALUES in transformInsertStmt() wasn't expecting any of those, and just ignored them, leading to unexpected results. Rather than complicate the special-case path, just ensure that the presence of any of those clauses makes us treat the query as if it had a general SELECT. Per report from Hitoshi Harada.
* Throw an appropriate error if ALTER COLUMN TYPE finds a dependent trigger.Tom Lane2010-10-02
| | | | | | | | | Actually making this case work, if the column is used in the trigger's WHEN condition, will take some new code that probably isn't appropriate to back-patch. For now, just throw a FEATURE_NOT_SUPPORTED error rather than allowing control to reach the "unexpected object" case. Per bug #5688 from Daniel Grace. Back-patch to 9.0 where the possibility of such a dependency was introduced.
* Improve messages for too many private files/dirs. Per Alexey Parshin.Tom Lane2010-09-28
|
* Fix PlaceHolderVar mechanism's interaction with outer joins.Tom Lane2010-09-28
| | | | | | | | | | | | | | The point of a PlaceHolderVar is to allow a non-strict expression to be evaluated below an outer join, after which its value bubbles up like a Var and can be forced to NULL when the outer join's semantics require that. However, there was a serious design oversight in that, namely that we didn't ensure that there was actually a correct place in the plan tree to evaluate the placeholder :-(. It may be necessary to delay evaluation of an outer join to ensure that a placeholder that should be evaluated below the join can be evaluated there. Per recent bug report from Kirill Simonov. Back-patch to 8.4 where the PlaceHolderVar mechanism was introduced.
* Add a SECURITY LABEL command.Robert Haas2010-09-27
| | | | | | | | This is intended as infrastructure to support integration with label-based mandatory access control systems such as SE-Linux. Further changes (mostly hooks) will be needed, but this is a big chunk of it. KaiGai Kohei and Robert Haas
* Add "(change requires restart)" note to some postgresql.conf parameters.Robert Haas2010-09-27
| | | | Devrim GÜNDÜZ
* Add ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTEPeter Eisentraut2010-09-26
| | | | | | | Like with tables, this also requires allowing the existence of composite types with zero attributes. reviewed by KaiGai Kohei
* Fix another join removal bug: the check on PlaceHolderVars was wrong.Tom Lane2010-09-25
| | | | | | | | The previous coding would decide that join removal was unsafe upon finding a PlaceHolderVar that needed to be evaluated at the inner rel and then used above the join. However, this fails to cover the case of PlaceHolderVars that refer to both the inner rel and some other rels. Per bug report from Andrus.
* ProcessIncomingNotify *must* reset notifyInterruptOccurred when called.Tom Lane2010-09-23
| | | | | This was broken in 9.0 by careless addition of an early-exit path. Bug report and diagnosis by Jeff Davis.
* Prevent show_session_authorization from crashing when session_authorizationTom Lane2010-09-23
| | | | | | | | | | | | | | | hasn't been set. The only known case where this can happen is when show_session_authorization is invoked in an autovacuum process, which is possible if an index function calls it, as for example in bug #5669 from Andrew Geery. We could perhaps try to return a sensible value, such as the name of the cluster-owning superuser; but that seems like much more trouble than the case is worth, and in any case it could create new possible failure modes. Simply returning an empty string seems like the most appropriate fix. Back-patch to all supported versions, even those before autovacuum, just in case there's another way to provoke this crash.
* Avoid sharing subpath list structure when flattening nested AppendRels.Tom Lane2010-09-23
| | | | | | | | | | | | | In some situations the original coding led to corrupting the child AppendRel's subpaths list, effectively adding other members of the parent's list to it. This was usually masked because we never made any further use of the child's list, but given the right combination of circumstances, we could do so. The visible symptom would be a relation getting scanned twice, as in bug #5673 from David Schmitt. Backpatch to 8.2, which is as far back as the risky coding appears. The example submitted by David only fails in 8.4 and later, but I'm not convinced that there aren't any even-more-obscure cases where 8.2 and 8.3 would fail.
* Make _outPathInfo print the relid set of the path's parent rel.Tom Lane2010-09-23
| | | | | | | We can't actually print the parent RelOptInfo in toto, because that would lead to infinite recursion. But it's safe enough to reach into the parent and print its identifying relids, and that makes it a whole lot easier to figure out what a Path represents. Should have done this years ago.
* Re-allow input of Julian dates prior to 0001-01-01 AD.Tom Lane2010-09-22
| | | | | | This was unintentionally broken in 8.4 while tightening up checking of ordinary non-Julian date inputs to forbid references to "year zero". Per bug #5672 from Benjamin Gigot.