summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2012-02-13Allow LEAKPROOF functions for better performance of security views.Robert Haas
We don't normally allow quals to be pushed down into a view created with the security_barrier option, but functions without side effects are an exception: they're OK. This allows much better performance in common cases, such as when using an equality operator (that might even be indexable). There is an outstanding issue here with the CREATE FUNCTION / ALTER FUNCTION syntax: there's no way to use ALTER FUNCTION to unset the leakproof flag. But I'm committing this as-is so that it doesn't have to be rebased again; we can fix up the grammar in a future commit. KaiGai Kohei, with some wordsmithing by me.
2012-02-13Improve labeling of pg_test_fsync open_sync test output.Bruce Momjian
2012-02-13Do not use the variable name when defining a varchar structure in ecpg.Michael Meskes
With a unique counter being added anyway, there is no need anymore to have the variable name listed, too.
2012-02-13Fix auto-explain JSON output to be valid JSON.Andrew Dunstan
Problem reported by Peter Eisentraut. Backpatched to release 9.0.
2012-02-13Fix heap_multi_insert to set t_self field in the caller's tuples.Heikki Linnakangas
If tuples were toasted, heap_multi_insert didn't update the ctid on the original tuples. This caused a failure if there was an after trigger (including a foreign key), on the table, and a tuple got toasted. Per off-list report and test case from Ted Phelps
2012-02-13Silence warning about deprecated assignment to $[ in check_keywords.plHeikki Linnakangas
Alex Hunsaker
2012-02-11Fix I/O-conversion-related memory leaks in plpgsql.Tom Lane
Datatype I/O functions are allowed to leak memory in CurrentMemoryContext, since they are generally called in short-lived contexts. However, plpgsql calls such functions for purposes of type conversion, and was calling them in its procedure context. Therefore, any leaked memory would not be recovered until the end of the plpgsql function. If such a conversion was done within a loop, quite a bit of memory could get consumed. Fix by calling such functions in the transient "eval_econtext", and adjust other logic to match. Back-patch to all supported versions. Andres Freund, Jan UrbaƄski, Tom Lane
2012-02-10Fix oversight in pg_dump's handling of extension configuration tables.Tom Lane
If an extension has not been selected to be dumped (perhaps because of a --schema or --table switch), the contents of its configuration tables surely should not get dumped either. Per gripe from Hubert Depesz Lubaczewski.
2012-02-10Fix brain fade in previous pg_dump patch.Tom Lane
In pre-7.3 databases, pg_attribute.attislocal doesn't exist. The easiest way to make sure the new inheritance logic behaves sanely is to assume it's TRUE, not FALSE. This will result in printing child columns even when they're not really needed. We could work harder at trying to reconstruct a value for attislocal, but there is little evidence that anyone still cares about dumping from such old versions, so just do the minimum necessary to have a valid dump. I had this correct in the original draft of the patch, but for some unaccountable reason decided it wasn't necessary to change the value. Testing against an old server shows otherwise...
2012-02-10Fix pg_dump for better handling of inherited columns.Tom Lane
Revise pg_dump's handling of inherited columns, which was last looked at seriously in 2001, to eliminate several misbehaviors associated with inherited default expressions and NOT NULL flags. In particular make sure that a column is printed in a child table's CREATE TABLE command if and only if it has attislocal = true; the former behavior would sometimes cause a column to become marked attislocal when it was not so marked in the source database. Also, stop relying on textual comparison of default expressions to decide if they're inherited; instead, don't use default-expression inheritance at all, but just install the default explicitly at each level of the hierarchy. This fixes the search-path-related misbehavior recently exhibited by Chester Young, and also removes some dubious assumptions about the order in which ALTER TABLE SET DEFAULT commands would be executed. Back-patch to all supported branches.
2012-02-10Add ORDER BY to a query to prevent occasional regression test failures.Tom Lane
Per buildfarm, we sometimes get row-ordering variations in the output. This also makes this query look more like numerous other ones in the same test file.
2012-02-09psql: Support zero byte field and record separatorsPeter Eisentraut
Add new psql settings and command-line options to support setting the field and record separators for unaligned output to a zero byte, for easier interfacing with other shell tools. reviewed by Abhijit Menon-Sen
2012-02-09Attempt to fix MSVC builds and other fls-related breakage.Robert Haas
Thanks to Andrew Dunstan for bringing this to my attention.
2012-02-09Add a comment to AdjustIntervalForTypmod to reduce chance of future bugs.Robert Haas
It's not entirely evident how the logic here relates to the interval_transform function, so let's clue people in that they need to check that if the rules change.
2012-02-09Improve interval_transform function to detect a few more cases.Robert Haas
Noah Misch, per a review comment from me.
2012-02-09Have pg_receivexlog always send an invalid log position in status messagesMagnus Hagander
This prevents pg_basebackup and pg_receivexlog from becoming a synchronous standby in case 'write' is used for synchronous_commit. Fujii Masao
2012-02-09Add new keywords SNAPSHOT and TYPES to the keyword list in gram.yHeikki Linnakangas
These were added to kwlist.h as unreserved keywords in separate patches, but authors forgot to add them to the corresponding list in gram.y. Because of that, even though they were supposed to be unreserved keywords, they could not be used as identifiers. src/tools/check_keywords.pl is your friend.
2012-02-08Throw error sooner for unlogged GiST indexes.Tom Lane
Throwing an error only after we've built the main index fork is pretty unfriendly when the table already contains data. Per gripe from Jay Levitt.
2012-02-08Fix up dumping conditions for extension configuration tables.Tom Lane
Various filters that were meant to prevent dumping of table data were not being applied to extension config tables, notably --exclude-table-data and --no-unlogged-table-data. We also would bogusly try to dump data from views, sequences, or foreign tables, should an extension try to claim they were config tables. Fix all that, and refactor/redocument to try to make this a bit less fragile. This reverts the implementation, though not the feature, of commit 7b070e896ca835318c90b02c830a5c4844413b64, which had broken config-table dumping altogether :-(. It is still the case that the code will dump config-table data even if --schema is specified. That behavior was intentional, as per the comments in getExtensionMembership, so I think it requires some more discussion before we change it.
2012-02-08Check misplaced window functions before checking aggregate/group by sanity.Tom Lane
If somebody puts a window function in WHERE, we should complain about that in so many words. The previous coding tended to complain about the window function's arguments instead, which is likely to be misleading to users who are unclear on the semantics of window functions; as seen for example in bug #6440 from Matyas Novak. Just another example of how "add new code at the end" is frequently a bad heuristic.
2012-02-08Support min/max index optimizations on boolean columns.Tom Lane
Since bool_and() is equivalent to min(), and bool_or() to max(), we might as well let them be index-optimized in the same way. The practical value of this is debatable at best, but it seems nearly cost-free to enable it. Code-wise, we need only adjust the entries in pg_aggregate. There is a measurable planning speed penalty for a query involving one of these aggregates, but it is only a few percent in simple cases, so that seems acceptable. Marti Raudsepp, reviewed by Abhijit Menon-Sen
2012-02-08Mark some more I/O-conversion-invoking functions as stable not volatile.Tom Lane
When written, textanycat, anytextcat, quote_literal, and quote_nullable were marked volatile, because they could invoke arbitrary type-specific output functions as part of casting their anyelement arguments to text. Since then, we have defined a project policy that I/O functions must not be volatile, as per commit aab353a60b95aadc00f81da0c6d99bde696c4b75. So these functions can safely be downgraded to stable. Most of the time this makes no difference since they'll get inlined anyway, but as noted by Andrew Dunstan, there are cases where the volatile marking prevents optimizations that the planner does before function inlining. (I think I might have overlooked these functions in the earlier commit on the grounds that inlining would make it moot, but not so --- tgl) This change results in a change in the expected output of the json regression tests, because the planner can now flatten a sub-select that it failed to before. The old output is preferable, but getting that back will require some as-yet-unfinished work on RowExpr handling. Marti Raudsepp
2012-02-08Add transform functions for various temporal typmod coercisions.Robert Haas
This enables ALTER TABLE to skip table and index rebuilds in some cases. Noah Misch, with trivial changes by me.
2012-02-08Rename LWLockWaitUntilFree to LWLockAcquireOrWait.Heikki Linnakangas
LWLockAcquireOrWait makes it more clear that the lock is acquired if it's free.
2012-02-07Fix typos pointed out by Noah Misch.Robert Haas
2012-02-07Add opensp as a requirement for building the docs on Debian --- testedBruce Momjian
on Debian Squeeze.
2012-02-07pg_dump: Add some const qualifiersPeter Eisentraut
2012-02-07pg_regress: Use target-specific variable instead of overriding make rulePeter Eisentraut
Use a target-specific variable to add to CPPFLAGS instead of writing a custom .c -> .o rule. This will ensure that dependency tracking is used when enabled.
2012-02-07Fix typo in comment.Heikki Linnakangas
2012-02-07Support fls().Robert Haas
The immediate impetus for this is that Noah Misch's patch to elide unnecessary table and index rebuilds when changing typmod for temporal types uses it; and this is extracted from that patch, with some further commentary by me. But it seems logically separate from the remainder of the patch, so I'm committing it separately; this is not the first time someone has wanted fls() in the backend and probably won't be the last. If we end up using this in more performance-critical spots it may be worthwhile to add some architecture-specific optimizations to our src/port version of fls() - e.g. any x86 platform can implement this using the assembly instruction BSRL. But performance won't matter a bit for assessing typmod changes, so I'm not worried about that right now.
2012-02-07Add a transform function for varbit typmod coercisions.Robert Haas
This enables ALTER TABLE to skip table and index rebuilds when the new type is unconstraint varbit, or when the allowable number of bits is not decreasing. Noah Misch, with review and a fix for an OID collision by me.
2012-02-07Add a transform function for numeric typmod coercisions.Robert Haas
This enables ALTER TABLE to skip table and index rebuilds when a column is changed to an unconstrained numeric, or when the scale is unchanged and the precision does not decrease. Noah Misch, with a few stylistic changes and a fix for an OID collision by me.
2012-02-07Add TIMING option to EXPLAIN, to allow eliminating of timing overhead.Robert Haas
Sometimes it may be useful to get actual row counts out of EXPLAIN (ANALYZE) without paying the cost of timing every node entry/exit. With this patch, you can say EXPLAIN (ANALYZE, TIMING OFF) to get that. Tomas Vondra, reviewed by Eric Theise, with minor doc changes by me.
2012-02-07pg_dump: Further reduce reliance on global variables.Robert Haas
This is another round of refactoring to make things simpler for parallel pg_dump. pg_dump.c now issues SQL queries through the relevant Archive object, rather than relying on the global variable g_conn. This commit isn't quite enough to get rid of g_conn entirely, but it makes a big dent in its utilization and, along the way, manages to be slightly less code than before.
2012-02-07createuser: Disable prompting by defaultPeter Eisentraut
Do not prompt when options were not specified. Assume --no-createdb, --no-createrole, --no-superuser by default. Also disable prompting for user name in dropdb, unless --interactive was specified. reviewed by Josh Kupershmidt
2012-02-07When building with LWLOCK_STATS, initialize the stats in LWLockWaitUntilFree.Heikki Linnakangas
If LWLockWaitUntilFree was called before the first LWLockAcquire call, you would either crash because of access to uninitialized array or account the acquisition incorrectly. LWLockConditionalAcquire doesn't have this problem because it doesn't update the lwlock stats. In practice, this never happens because there is no codepath where you would call LWLockWaitUntilfree before LWLockAcquire after a new process is launched. But that's just accidental, there's no guarantee that that's always going to be true in the future. Spotted by Jeff Janes.
2012-02-06Fix postmaster to attempt restart after a hot-standby crash.Tom Lane
The postmaster was coded to treat any unexpected exit of the startup process (i.e., the WAL replay process) as a catastrophic crash, and not try to restart it. This was OK so long as the startup process could not have any sibling postmaster children. However, if a hot-standby backend crashes, we SIGQUIT the startup process along with everything else, and the resulting exit is hardly "unexpected". Treating it as such meant we failed to restart a standby server after any child crash at all, not only a crash of the WAL replay process as intended. Adjust that. Back-patch to 9.0 where hot standby was introduced.
2012-02-06Allow the connection keyword array to carry all seven items in ecpglib.Michael Meskes
2012-02-06Avoid throwing ERROR during WAL replay of DROP TABLESPACE.Tom Lane
Although we will not even issue an XLOG_TBLSPC_DROP WAL record unless removal of the tablespace's directories succeeds, that does not guarantee that the same operation will succeed during WAL replay. Foreseeable reasons for it to fail include temp files created in the tablespace by Hot Standby backends, wrong directory permissions on a standby server, etc etc. The original coding threw ERROR if replay failed to remove the directories, but that is a serious overreaction. Throwing an error aborts recovery, and worse means that manual intervention will be needed to get the database to start again, since otherwise the same error will recur on subsequent attempts to replay the same WAL record. And the consequence of failing to remove the directories is only that some probably-small amount of disk space is wasted, so it hardly seems justified to throw an error. Accordingly, arrange to report such failures as LOG messages and keep going when a failure occurs during replay. Back-patch to 9.0 where Hot Standby was introduced. In principle such problems can occur in earlier releases, but Hot Standby increases the odds of trouble significantly. Given the lack of field reports of such issues, I'm satisfied with patching back as far as the patch applies easily.
2012-02-06pg_dump: Remove global Archive pointer.Robert Haas
Instead, everything that needs the Archive object now gets it as a parameter. This is necessary infrastructure for parallel pg_dump, but is also amply justified by the ugliness of the current code (though a lot more than this is needed to fix that problem).
2012-02-06pg_dump: Reduce dependencies on global variables.Robert Haas
Change various places in the code that are referencing the global Archive object g_fout to instead reference the Archive object fout which is already being passed as a parameter. For parallel pg_dump to work, we're going to need multiple Archive(Handle) objects, so the real solution here is to pass down the Archive object to everywhere that it needs to go, but we might as well pick the low-hanging fruit first.
2012-02-06Add locking around WAL-replay modification of shared-memory variables.Tom Lane
Originally, most of this code assumed that no Postgres backends could be running concurrently with it, and so no locking could be needed. That assumption fails in Hot Standby. While it's still true that Hot Standby backends should never change values like nextXid, they can examine them, and consistency is important in some cases such as when computing a snapshot. Therefore, prudence requires that WAL replay code obtain the relevant locks when modifying such variables, even though it can examine them without taking a lock. We were following that coding rule in some places but not all. This commit applies the coding rule uniformly to all updates of ShmemVariableCache and MultiXactState fields; a search of the replay routines did not find any other cases that seemed to be at risk. In addition, this commit fixes a longstanding thinko in replay of NEXTOID and checkpoint records: we tried to advance nextOid only if it was behind the value in the WAL record, but the comparison would draw the wrong conclusion if OID wraparound had occurred since the previous value. Better to just unconditionally assign the new value, since OID assignment shouldn't be happening during replay anyway. The additional locking seems to be more in the nature of future-proofing than fixing any live bug, so I am not going to back-patch it. The NEXTOID fix will be back-patched separately.
2012-02-06Remove dead declaration.Robert Haas
2012-02-06fe-misc.c depends on pg_config_paths.hAlvaro Herrera
Declare this in Makefile to avoid failures in parallel compiles. Author: Lionel Elie Mamane
2012-02-05Fix transient clobbering of shared buffers during WAL replay.Tom Lane
RestoreBkpBlocks was in the habit of zeroing and refilling the target buffer; which was perfectly safe when the code was written, but is unsafe during Hot Standby operation. The reason is that we have coding rules that allow backends to continue accessing a tuple in a heap relation while holding only a pin on its buffer. Such a backend could see transiently zeroed data, if WAL replay had occasion to change other data on the page. This has been shown to be the cause of bug #6425 from Duncan Rance (who deserves kudos for developing a sufficiently-reproducible test case) as well as Bridget Frey's re-report of bug #6200. It most likely explains the original report as well, though we don't yet have confirmation of that. To fix, change the code so that only bytes that are supposed to change will change, even transiently. This actually saves cycles in RestoreBkpBlocks, since it's not writing the same bytes twice. Also fix seq_redo, which has the same disease, though it has to work a bit harder to meet the requirement. So far as I can tell, no other WAL replay routines have this type of bug. In particular, the index-related replay routines, which would certainly be broken if they had to meet the same standard, are not at risk because we do not have coding rules that allow access to an index page when not holding a buffer lock on it. Back-patch to 9.0 where Hot Standby was added.
2012-02-04Improve comment.Tom Lane
2012-02-04Add missing Assert and fix inaccurate elog message in standby_redo().Tom Lane
All other WAL redo routines either call RestoreBkpBlocks() or Assert that they haven't been passed any backup blocks. Make this one do likewise. Also, fix incorrect routine name in its failure message.
2012-02-04Allow SQL-language functions to reference parameters by name.Tom Lane
Matthew Draper, reviewed by Hitoshi Harada
2012-02-04Revert "Add some regression test cases for denormalized float8 input."Tom Lane
This reverts commit 500cf66d5522b39ddfdc26b309f8b5b0e385f42e. As was more or less expected, a small minority of platforms won't accept denormalized input even with the recent changes. It doesn't seem especially helpful to test this if we're going to have to provide an alternate expected-file to allow failure.
2012-02-04Remove tabs in SGML file.Bruce Momjian