summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2011-06-13Fix aboriginal copy-paste mistake in error messageAlvaro Herrera
Spotted by Jaime Casanova
2011-06-12Remove now-unnecessary casts.Heikki Linnakangas
Kevin Grittner
2011-06-11Tab completion improvements for COMMENT.Robert Haas
These pertain to object types introduced in PostgreSQL 9.1, so back-patch. Josh Kupershmidt, with some kibitzing by me.
2011-06-11Add C comment mentioning pg_stat_activity.procpid should have beenBruce Momjian
called 'pid'.
2011-06-10Work around gcc 4.6.0 bug that breaks WAL replay.Tom Lane
ReadRecord's habit of using both direct references to tmpRecPtr and references to *RecPtr (which is pointing at tmpRecPtr) triggers an optimization bug in gcc 4.6.0, which apparently has forgotten about aliasing rules. Avoid the compiler bug, and make the code more readable to boot, by getting rid of the direct references. Improve the comments while at it. Back-patch to all supported versions, in case they get built with 4.6.0. Tom Lane, with some cosmetic suggestions from Alex Hunsaker
2011-06-10Fix locking while setting flags in MySerializableXact.Heikki Linnakangas
Even if a flag is modified only by the backend owning the transaction, it's not safe to modify it without a lock. Another backend might be setting or clearing a different flag in the flags field concurrently, and that operation might be lost because setting or clearing a bit in a word is not atomic. Make did-write flag a simple backend-private boolean variable, because it was only set or tested in the owning backend (except when committing a prepared transaction, but it's not worthwhile to optimize for the case of a read-only prepared transaction). This also eliminates the need to add locking where that flag is set. Also, set the did-write flag when doing DDL operations like DROP TABLE or TRUNCATE -- that was missed earlier.
2011-06-10Add comment about pg_ctl stopAlvaro Herrera
2011-06-10Use "transient" files for blind writes, take 2Alvaro Herrera
"Blind writes" are a mechanism to push buffers down to disk when evicting them; since they may belong to different databases than the one a backend is connected to, the backend does not necessarily have a relation to link them to, and thus no way to blow them away. We were keeping those files open indefinitely, which would cause a problem if the underlying table was deleted, because the operating system would not be able to reclaim the disk space used by those files. To fix, have bufmgr mark such files as transient to smgr; the lower layer is allowed to close the file descriptor when the current transaction ends. We must be careful to have any other access of the file to remove the transient markings, to prevent unnecessary expensive system calls when evicting buffers belonging to our own database (which files we're likely to require again soon.) This commit fixes a bug in the previous one, which neglected to cleanly handle the LRU ring that fd.c uses to manage open files, and caused an unacceptable failure just before beta2 and was thus reverted.
2011-06-10Use a constant sprintf format to silence compiler warningAlvaro Herrera
2011-06-10Small comment fixes and enhancements.Heikki Linnakangas
2011-06-09Mention "pg_ctl stop" in pgindent README instructions.Bruce Momjian
2011-06-09Tag 9.1beta2.REL9_1_BETA2Tom Lane
2011-06-09Revert "Use "transient" files for blind writes"Alvaro Herrera
This reverts commit 54d9e8c6c19cbefa8fb42ed3442a0a5327590ed3, which caused a failure on the buildfarm. Not a good thing to have just before a beta release.
2011-06-09Use "transient" files for blind writesAlvaro Herrera
"Blind writes" are a mechanism to push buffers down to disk when evicting them; since they may belong to different databases than the one a backend is connected to, the backend does not necessarily have a relation to link them to, and thus no way to blow them away. We were keeping those files open indefinitely, which would cause a problem if the underlying table was deleted, because the operating system would not be able to reclaim the disk space used by those files. To fix, have bufmgr mark such files as transient to smgr; the lower layer is allowed to close the file descriptor when the current transaction ends. We must be careful to have any other access of the file to remove the transient markings, to prevent unnecessary expensive system calls when evicting buffers belonging to our own database (which files we're likely to require again soon.)
2011-06-09Translation updates for 9.1beta2Peter Eisentraut
2011-06-09Fix the truncation logic of the OldSerXid SLRU mechanism. We can't passHeikki Linnakangas
SimpleLruTruncate() a page number that's "in the future", because it will issue a warning and refuse to truncate anything. Instead, we leave behind the latest segment. If the slru is not needed before XID wrap-around, the segment will appear as new again, and not be cleaned up until it gets old enough again. That's a bit unpleasant, but better than not cleaning up anything. Also, fix broken calculation to check and warn if the span of the OldSerXid SLRU is getting too large to fit in the 64k SLRU pages that we have available. It was not XID wraparound aware. Kevin Grittner and me.
2011-06-09Pgindent run before 9.1 beta2.Bruce Momjian
2011-06-09Update typedef list for upcoming pgindent run.Bruce Momjian
2011-06-09Use the correct eventlog severity for errorMagnus Hagander
2011-06-09Support silent mode for service registrations on win32Magnus Hagander
Using -s when registering a service will now suppress the application eventlog entries stating that the service is starting and started. MauMau
2011-06-09Add gitignore for mingw/cygwin build outputsMagnus Hagander
Noted by Radosław Smogura
2011-06-09Mark the SLRU page as dirty when setting an entry in pg_serial. In theHeikki Linnakangas
passing, fix an incorrect comment.
2011-06-08Reorder pg_ctl promote after pg_ctl statusPeter Eisentraut
Since start/stop/restart/reload/status is a kind of standard command set, it seems odd to insert the special-purpose "promote" in between the closely related "restart" and "reload". So put it after "status" in code and documentation. Put the documentation of the -U option in some sensible place. Rewrite the synopsis sentence in help and documentation to make it less of a growing mouthful.
2011-06-08Allow domains over arrays to match ANYARRAY parameters again.Tom Lane
This use-case was broken in commit 529cb267a6843a6a8190c86b75d091771d99d6a9 of 2010-10-21, in which I commented "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". We still lack consensus about what to do with ANYELEMENT; but not matching ANYARRAY is a clear loss of functionality compared to prior releases, so let's go ahead and make that happen. Per complaint from Regina Obe and extensive subsequent discussion.
2011-06-08Make DDL operations play nicely with Serializable Snapshot Isolation.Heikki Linnakangas
Truncating or dropping a table is treated like deletion of all tuples, and check for conflicts accordingly. If a table is clustered or rewritten by ALTER TABLE, all predicate locks on the heap are promoted to relation-level locks, because the tuple or page ids of any existing tuples will change and won't be valid after rewriting the table. Arguably ALTER TABLE should be treated like a mass-UPDATE of every row, but if you e.g change the datatype of a column, you could also argue that it's just a change to the physical layout, not a logical change. Reindexing promotes all locks on the index to relation-level lock on the heap. Kevin Grittner, with a lot of cosmetic changes by me.
2011-06-07Complain politely about access temp/unlogged tables during recovery.Robert Haas
This has never been supported, but we previously let md.c issue the complaint for us at whatever point we tried to examine the backing file. Now we print a nicer error message. Per bug #6041, reported by Emanuel, and extensive discussion with Tom Lane over where to put the check.
2011-06-07Revert psql bits to display NOT VALID for FKsAlvaro Herrera
These are superseded by pg_get_constraintdef's ability to display the same when appropriate, which is a better place to do it anyway.
2011-06-07Make ascii-art in comments pgindent-safe, and some other formatting changes.Heikki Linnakangas
Kevin Grittner
2011-06-07Fix rewriter to cope (more or less) with CTEs in the query being rewritten.Tom Lane
Since the original implementation of CTEs only allowed them in SELECT queries, the rule rewriter did not expect to find any CTEs in statements being rewritten by ON INSERT/UPDATE/DELETE rules. We had dealt with this to some extent but the code was still several bricks shy of a load, as illustrated in bug #6051 from Jehan-Guillaume de Rorthais. In particular, we have to be able to copy CTEs from the original query's cteList into that of a rule action, in case the rule action references the CTE (which it pretty much always will). This also implies we were doing things in the wrong order in RewriteQuery: we have to recursively rewrite the CTE queries before expanding the main query, so that we have the rewritten queries available to copy. There are unpleasant limitations yet to resolve here, but at least we now throw understandable FEATURE_NOT_SUPPORTED errors for them instead of just failing with bizarre implementation-dependent errors. In particular, we can't handle propagating the same CTE into multiple post-rewrite queries (because then the CTE would be evaluated multiple times), and we can't cope with conflicts between CTE names in the original query and in the rule actions.
2011-06-05Reset reindex-in-progress state before reverifying an exclusion constraint.Tom Lane
This avoids an Assert failure when we try to use ordinary index fetches while checking for exclusion conflicts. Per report from Noah Misch. No need for back-patch because the Assert wasn't there before 9.1.
2011-06-04Allow building with perl 5.14.Andrew Dunstan
Patch from Alex Hunsaker.
2011-06-04Expose the "*VALUES*" alias that we generate for a stand-alone VALUES list.Tom Lane
We were trying to make that strictly an internal implementation detail, but it turns out that it's exposed anyway when dumping a view defined like CREATE VIEW test_view AS VALUES (1), (2), (3) ORDER BY 1; This comes out as CREATE VIEW ... ORDER BY "*VALUES*".column1; which fails to parse when reloading the dump. Hacking ruleutils.c to suppress the column qualification looks like it'd be a risky business, so instead promote the RTE alias to full-fledged usability. Per bug #6049 from Dylan Adams. Back-patch to all supported branches.
2011-06-03Fix pg_get_constraintdef to cope with NOT VALID constraintsAlvaro Herrera
This case was missed when NOT VALID constraints were first introduced in commit 722bf7017bbe796decc79c1fde03e7a83dae9ada by Simon Riggs on 2011-02-08. Among other things, it causes pg_dump to omit the NOT VALID flag when dumping such constraints, which may cause them to fail to load afterwards, if they contained values failing the constraint. Per report from Thom Brown.
2011-06-03Fix failure to check whether a rowtype's component types are sortable.Tom Lane
The existence of a btree opclass accepting composite types caused us to assume that every composite type is sortable. This isn't true of course; we need to check if the column types are all sortable. There was logic for this for the case of array comparison (ie, check that the element type is sortable), but we missed the point for rowtypes. Per Teodor's report of an ANALYZE failure for an unsortable composite type. Rather than just add some more ad-hoc logic for this, I moved knowledge of the issue into typcache.c. The typcache will now only report out array_eq, record_cmp, and friends as usable operators if the array or composite type will work with those functions. Unfortunately we don't have enough info to do this for anonymous RECORD types; in that case, just assume it will work, and take the runtime failure as before if it doesn't. This patch might be a candidate for back-patching at some point, but given the lack of complaints from the field, I'd rather just test it in HEAD for now. Note: most of the places touched in this patch will need further work when we get around to supporting hashing of record types.
2011-06-03SSI comment fixes and enhancements. Notably, document that the conflict-outHeikki Linnakangas
flag actually means that the transaction has a conflict out to a transaction that committed before the flagged transaction. Kevin Grittner
2011-06-02Need to list getpeereid.c in .gitignore, too ...Tom Lane
2011-06-02Handle domains when checking for recursive inclusion of composite types.Tom Lane
We need this now because we allow domains over arrays, and we'll probably allow domains over composites pretty soon, which makes the problem even more obvious. Although domains over arrays also exist in previous versions, this does not need to be back-patched, because the coding used in older versions successfully "looked through" domains over arrays. The problem is exposed by not treating a domain as having a typelem. Problem identified by Noah Misch, though I did not use his patch, since it would require additional work to handle domains over composites that way. This approach is more future-proof.
2011-06-02Looks like we can't declare getpeereid on Windows anyway.Tom Lane
... for lack of the uid_t and gid_t typedefs. Per buildfarm.
2011-06-02libpq needs its own copy of src/port/getpeereid.Tom Lane
... on some platforms, anyway. Per buildfarm.
2011-06-02Clean up after erroneous SELECT FOR UPDATE/SHARE on a sequence.Tom Lane
My previous commit disallowed this operation, but did nothing about cleaning up the damage if one had already been done. With the operation disallowed, it's okay to just forcibly clear xmax in a sequence's tuple, since any value seen there could not represent a live transaction's lock. So, any sequence-specific operation will repair the problem automatically, whether or not the user has already seen "could not access status of transaction" failures.
2011-06-02Fix vim-induced typo.Robert Haas
2011-06-02Disallow SELECT FOR UPDATE/SHARE on sequences.Tom Lane
We can't allow this because such an operation stores its transaction XID into the sequence tuple's xmax. Because VACUUM doesn't process sequences (and we don't want it to start doing so), such an xmax value won't get frozen, meaning it will eventually refer to nonexistent pg_clog storage, and even wrap around completely. Since the row lock is ignored by nextval and setval, the usefulness of the operation is highly debatable anyway. Per reports of trouble with pgpool 3.0, which had ill-advisedly started using such commands as a form of locking. In HEAD, also disallow SELECT FOR UPDATE/SHARE on toast tables. Although this does work safely given the current implementation, there seems no good reason to allow it. I refrained from changing that behavior in back branches, however.
2011-06-02Typo fix.Tom Lane
2011-06-02Avoid creating init fork for unlogged indexes when it already exists.Robert Haas
Report by Greg Sabino Mullane, diagnosis and preliminary patch by Andres Freund, corrections by me.
2011-06-02Implement getpeereid() as a src/port compatibility function.Tom Lane
This unifies a bunch of ugly #ifdef's in one place. Per discussion, we only need this where HAVE_UNIX_SOCKETS, so no need to cover Windows. Marko Kreen, some adjustment by Tom Lane
2011-06-01Allow hash joins to be interrupted while searching hash table for match.Tom Lane
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
2011-06-01Further improvements in pg_ctl's new wait-for-postmaster-start logic.Tom Lane
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.
2011-05-31Protect GIST logic that assumes penalty values can't be negative.Tom Lane
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
2011-05-31Recode non-ASCII characters in source to UTF-8Peter Eisentraut
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.
2011-05-31Replace use of credential control messages with getsockopt(LOCAL_PEERCRED).Tom Lane
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.