Andres Freund [Thu, 14 Mar 2013 22:36:41 +0000 (23:36 +0100)]
bdr: mergme: create slot names automatically
Andres Freund [Fri, 22 Feb 2013 16:43:49 +0000 (17:43 +0100)]
bdr: plugin
Andres Freund [Fri, 22 Feb 2013 16:43:27 +0000 (17:43 +0100)]
bdr: Introduce "replication_identifiers" to keep track of remote nodes
Replication identifiers can be used to track & lookup remote nodes identified
via (sysid, tlid, remote_dbid, local_dbid, name) and map that tuple to a local
uint16.
Keyed by that replication identifier the remote lsn and the local lsn is
tracked in a crash safe manner.
Support for tracking that via output plugins is added as well.
Needs a catversion bump.
Andres Freund [Mon, 25 Feb 2013 21:02:12 +0000 (22:02 +0100)]
bdr: Allow repeatedly qualified IDs in postgresql.conf and allow them to start with numbers from the second ID
Andres Freund [Wed, 20 Feb 2013 16:19:13 +0000 (17:19 +0100)]
wal_decoding: regression test hacks
Andres Freund [Thu, 20 Sep 2012 10:38:15 +0000 (12:38 +0200)]
wal_decoding: design document v2.3 and snapshot building design doc v0.2
Abhijit Menon-Sen [Fri, 11 Jan 2013 09:06:48 +0000 (14:36 +0530)]
wal_decoding: test_logical_decoding: Add extension for easier testing of logical decoding
This extension provides three functions for manipulating replication slots:
* init_logical_replication - initiate a replication slot and wait for consistent state
* start_logical_replication - return all changes since the last call up to now, without blocking
* free_logical_replication - free the logical slot again
Those are pretty direct synonyms for the replication connection commands.
Due to questions about how to integrate logical replication tests this module
also contains the current tests of logical replication itself.
Author: Abhijit Menon-Sen
Andres Freund [Sun, 11 Nov 2012 12:07:51 +0000 (13:07 +0100)]
wal_decoding: pg_receivelog: Introduce pg_receivexlog equivalent for logical changes
Andres Freund [Sun, 11 Nov 2012 12:01:52 +0000 (13:01 +0100)]
wal_decoding: test_decoding: Add a simple decoding module in contrib
This is mostly useful for testing, demonstration and documentation purposes.
Andres Freund [Thu, 5 Apr 2012 09:07:33 +0000 (11:07 +0200)]
wal_decoding: Introduce wal decoding via catalog timetravel
This introduces several things:
* 'reorderbuffer' module which reassembles transactions from a stream of interspersed changes
* 'snapbuilder' which builds catalog snapshots so that tuples from wal can be understood
* logging more data into wal to facilitate logical decoding
* wal decoding into an reorderbuffer
* shared library output plugins with 5 callbacks
* init
* begin
* change
* commit
* walsender infrastructur to stream out changes and to keep the global xmin low enough
* INIT_LOGICAL_REPLICATION $plugin; waits till a consistent snapshot is built and returns
* initial LSN
* replication slot identifier
* id of a pg_export() style snapshot
* START_LOGICAL_REPLICATION $id $lsn; streams out changes
* uses named output plugins for output specification
Todo:
* better integrated testing infrastructure
* more frequent lowering of xmins
* more docs about the internals
* support for user declared catalog tables
* nicer interface between snapbuild.c, reorderbuffer.c, decode.c and the
outside.
* user docs
Lowlevel:
* REINDEX/VACUUM FULL support for timetravel txns
* resource owner handling is suboptimal
* invalidations from uninteresting transactions (e.g. from other databases, old ones)
need to be processed anyway
* error handling in walsender is suboptimal
* walsender slots need to be marked as catchup
* pg_receivellog needs to send a reply immediately when postgres is shutting down
Input, Testing and Review by:
Heikki Linnakangas
Kevin Grittner
Michael Paquier
Abhijit Menon-Sen
Peter Gheogegan
Robert Haas
Simon Riggs
Steve Singer
Code By:
Andres Freund
Abhijit Menon-Sen
Andres Freund [Mon, 14 Jan 2013 11:16:54 +0000 (12:16 +0100)]
wal_decoding: Add information about a tables primary key to struct RelationData
'rd_primary' now contains the Oid of an index over uniquely identifying
columns. Several types of indexes are interesting and are collected in that
order:
* Primary Key
* oid index
* the first (OID order) unique, immediate, non-partial and
non-expression index over one or more NOT NULL'ed columns
To gather rd_primary value RelationGetIndexList() needs to have been called.
This is helpful because for logical replication we frequently - on the sending
and receiving side - need to lookup that index and RelationGetIndexList already
gathers all the necessary information.
This could be used to replace tablecmd.c's transformFkeyGetPrimaryKey, but
would change the meaning of that, so it seems to require additional discussion.
Andres Freund [Wed, 9 Jan 2013 16:36:20 +0000 (17:36 +0100)]
wal_decoding: copydir: make fsync_fname public
This probably should be somewhere else, its a generally useful function, not
really related to copying directories. fd.[ch]?
Andres Freund [Mon, 10 Dec 2012 11:08:30 +0000 (12:08 +0100)]
wal_decoding: Log xl_running_xact's at a higher frequency than checkpoints are done
Do so in the background writer which seems to be the best choice as its
regularly running and shouldn't be busy for too long without getting back into
its main loop.
Also mark xl_standby records as being relevant for async commit so the wal
writer writes them out soonish.
This might also be beneficial for HS as it would make it faster to hit a spot
where no (old) transactions are running anymroe.
Andres Freund [Thu, 13 Dec 2012 19:47:57 +0000 (20:47 +0100)]
wal_decoding: Add alreadyLocked parameter to GetOldestXminNoLock
This is useful because it allows to compute the current OldestXmin while
already holding the procarray lock which enables setting the own xmin horizon
safely.
Andres Freund [Tue, 13 Nov 2012 11:54:36 +0000 (12:54 +0100)]
wal_decoding: Allow walsender's to connect to a specific database
Currently the decision whether to connect to a database or not is made by
checking whether the passed "dbname" parameter is "replication". Unfortunately
this makes it impossible to connect a to a database named replication...
This is useful for future walsender commands which need database interaction.
Andres Freund [Mon, 12 Nov 2012 12:39:52 +0000 (13:39 +0100)]
wal_decoding: Adjust all *Satisfies routines to take a HeapTuple instead of a HeapTupleHeader
For the regular satisfies routines this is needed in prepareation of logical
decoding. I changed the non-regular ones for consistency as well.
The naming between htup, tuple and similar is rather confused, I could not find
any consistent naming anywhere.
This is preparatory work for the logical decoding feature which needs to be
able to get to a valid relfilenode from when checking the visibility of a
tuple.
Andres Freund [Tue, 13 Nov 2012 11:18:07 +0000 (12:18 +0100)]
wal_decoding: Introduce InvalidCommandId and declare that to be the new maximum for CommandCounterIncrement
This is useful to be able to represent a CommandId thats invalid. There was no
such value before.
This decreases the possible number of subtransactions by one which seems
unproblematic. Its also not a problem for pg_upgrade because cmin/cmax are
never looked at outside the context of their own transaction (spare timetravel
access, but thats new anyway).
Andres Freund [Sun, 16 Sep 2012 21:53:23 +0000 (23:53 +0200)]
wal_decoding: Add pg_relation_by_filenode to lookup up a relation by (tablespace, filenode)
This requires the previously added RELFILENODE syscache and the added
RelationMapFilenodeToOid function added in previous two commits.
Andres Freund [Sun, 16 Sep 2012 21:51:08 +0000 (23:51 +0200)]
wal_decoding: Add RelationMapFilenodeToOid function to relmapper.c
This function maps (reltablespace, relfilenode) to the table oid and thus acts
as a reverse of RelationMapOidToFilenode.
Andres Freund [Thu, 5 Apr 2012 09:09:59 +0000 (11:09 +0200)]
wal_decoding: Add a new RELFILENODE syscache to fetch a pg_class entry via (reltablespace, relfilenode)
This cache is theoretically problematic because formally indexes used by
syscaches needs to be unique, this one is not. This is "just" because of
0/InvalidOid are stored in pg_class.relfilenode for nailed/shared catalog
relations. This syscache will never be queried for InvalidOid relfilenodes
however so it seems to be safe even if it bends the rules somewhat.
It might be nicer to add infrastructure to do this properly, like using a
partial index, its not clear what the best way to do this is though and the
benefit very well might not be worth the overhead.
Needs a CATVERSION bump.
Andres Freund [Sun, 17 Feb 2013 00:38:17 +0000 (01:38 +0100)]
Add support for in-memory out-of-line stored toast data
For some use-cases like logical decoding of wal or avoidance of repeated
detoasting of toast tuples it is useful to represent varlenas that are stored
in memory but outside of a HeapTuple. E.g. because it is impossible to allocate
a memory chunk for the whole tuple at once or because the overhead of repeated
detoasting from disk is noticeable.
For that support "indirect" toast tuples which point to another 'struct
varlena' in memory. That referenced tuple can be short, compressed or normal.
As there are no further flag bits available to discern such an indirection from
the other forms inside the original Datum we reuse the VARATT_IS_EXTERNAL
representation for this which apt because they are also
out-of-line. Unfortunately only varatt_1b_e.va_length is available to discern
toast and indirection toast tuple, so they must be different for both. A
StaticAssertStm to make sure of that is included.
Tom Lane [Thu, 14 Mar 2013 19:10:41 +0000 (15:10 -0400)]
Avoid inserting no-op Limit plan nodes.
This was discussed in connection with the patch to avoid inserting no-op
Result nodes, but not actually implemented therein.
Kevin Grittner [Thu, 14 Mar 2013 18:59:52 +0000 (13:59 -0500)]
Revert unnecessary change in MV call to checkRuleResultList().
Due to a misreading of the function's comment block, there was an
unneeded change to a call in rewriteDefine.c. There is, in fact
no reason to pass false for a MV; it should be true just like a
view.
Fixes issue pointed out by Tom Lane
Kevin Grittner [Thu, 14 Mar 2013 18:34:51 +0000 (13:34 -0500)]
Add regression test for MV join to view.
This would have caught a bug in the initial patch, and seems like
a good thing to test going forward.
Per bug report by Erik Rijkers and fix by Tom Lane
Heikki Linnakangas [Thu, 14 Mar 2013 18:31:27 +0000 (20:31 +0200)]
Also update psqlscan.l with the UESCAPE error rule changes.
Even though this patch had no user-visible difference, better keep the code
in psqlscan.l sync with the backend lexer. And of course it's nice to shrink
the psql binary, too. Ecpg's version of the lexer doesn't have the error
rule, it doesn't try to avoid backing up, so it doesn't need to be modified.
As reminded by Tom Lane
Tom Lane [Thu, 14 Mar 2013 17:51:47 +0000 (13:51 -0400)]
Minor fixes for hstore_to_json_loose().
Fix unportable use of isdigit(), get rid of useless calculations.
Tom Lane [Thu, 14 Mar 2013 17:42:51 +0000 (13:42 -0400)]
Avoid inserting Result nodes that only compute identity projections.
The planner sometimes inserts Result nodes to perform column projections
(ie, arbitrary scalar calculations) above plan nodes that lack projection
logic of their own. However, we did that even if the lower plan node was
in fact producing the required column set already; which is a pretty common
case given the popularity of "SELECT * FROM ...". Measurements show that
the useless plan node adds non-negligible overhead, especially when there
are many columns in the result. So add a check to avoid inserting a Result
node unless there's something useful for it to do.
There are a couple of remaining places where unnecessary Result nodes
could get inserted, but they are (a) much less performance-critical,
and (b) coded in such a way that it's hard to avoid inserting a Result,
because the desired tlist is changed on-the-fly in subsequent logic.
We'll leave those alone for now.
Kyotaro Horiguchi; reviewed and further hacked on by Amit Kapila and
Tom Lane.
Heikki Linnakangas [Thu, 14 Mar 2013 17:00:09 +0000 (19:00 +0200)]
Change the way UESCAPE is lexed, to reduce the size of the flex tables.
The error rule used to avoid backtracking with the U&'...' UESCAPE 'x'
syntax bloated the flex tables, so refactor that. This patch makes the error
rule shorter, by introducing a new exclusive flex state that's entered after
parsing U&'...'. This shrinks the postgres binary by about 220kB.
Heikki Linnakangas [Thu, 14 Mar 2013 13:36:56 +0000 (15:36 +0200)]
Add cost estimation of range @> and <@ operators.
The estimates are based on the existing lower bound histogram, and a new
histogram of range lengths.
Bump catversion, because the range length histogram now needs to be present
in statistic slot kind 6, or you get an error on @> and <@ queries. (A
re-ANALYZE would be enough to fix that, though)
Alexander Korotkov, with some refactoring by me.
Peter Eisentraut [Thu, 14 Mar 2013 02:42:57 +0000 (22:42 -0400)]
Add regression tests for XML mapping of domains
Pavel Stěhule
Kevin Grittner [Thu, 14 Mar 2013 01:20:32 +0000 (20:20 -0500)]
Fix bug in dumping prior releases due to MV REFRESH dependency checking.
Reports and suggested patches from Fujii Masao and Andrew Dunstan.
Andrew Dunstan
Tom Lane [Wed, 13 Mar 2013 23:46:31 +0000 (19:46 -0400)]
Introduce less-bogus handling of collations in contrib/postgres_fdw.
Treat expressions as being remotely executable only if all collations used
in them are determined by Vars of the foreign table. This means that, if
the foreign server gets different answers than we do, it's the user's fault
for not having marked the foreign table columns with collations equivalent
to the remote table's. This rule allows most simple expressions such as
"var < 'constant'" to be sent to the remote side, because the constant
isn't determining the collation (the Var's collation would win). There's
still room for improvement, but it's hard to see how to do it without a
lot more knowledge and/or assumptions about what the remote side will do.
Tom Lane [Tue, 12 Mar 2013 23:06:43 +0000 (19:06 -0400)]
Fix documentation oversight.
Mention that PlanForeignModify's result must be copiable by copyObject.
Tom Lane [Tue, 12 Mar 2013 22:58:13 +0000 (18:58 -0400)]
Fix contrib/postgres_fdw's handling of column defaults.
Adopt the position that only locally-defined defaults matter. Any defaults
defined in the remote database do not affect insertions performed through
a foreign table (unless they are for columns not known to the foreign
table). While it'd arguably be more useful to permit remote defaults to be
used, making that work in a consistent fashion requires far more work than
seems possible for 9.3.
Tom Lane [Tue, 12 Mar 2013 21:37:07 +0000 (17:37 -0400)]
Allow default expressions to be attached to columns of foreign tables.
There's still some discussion about exactly how postgres_fdw ought to
handle this case, but there seems no debate that we want to allow defaults
to be used for inserts into foreign tables. So remove the core-code
restrictions that prevented it.
While at it, get rid of the special grammar productions for CREATE FOREIGN
TABLE, and instead add explicit FEATURE_NOT_SUPPORTED error checks for the
disallowed cases. This makes the grammar a shade smaller, and more
importantly results in much more intelligible error messages for
unsupported cases. It's also one less thing to fix if we ever start
supporting constraints on foreign tables.
Alvaro Herrera [Tue, 12 Mar 2013 14:57:22 +0000 (11:57 -0300)]
Fix orthotypographical mistake
Apparently I lost some of the edits I had done on this page for commit
0ac5ad5134.
Per note from Etsuro Fujita, although I didn't use his patch.
Make some of the wording in the affected section a bit more complete,
too.
Tom Lane [Tue, 12 Mar 2013 14:47:04 +0000 (10:47 -0400)]
Avoid row-processing-order dependency in postgres_fdw regression test.
A test intended to provoke an error on the remote side was coded in such
a way that multiple rows should be updated, so the output would vary
depending on which one was processed first. Per buildfarm.
Tom Lane [Tue, 12 Mar 2013 01:31:28 +0000 (21:31 -0400)]
Fix postgres_fdw's issues with inconsistent interpretation of data values.
For datatypes whose output formatting depends on one or more GUC settings,
we have to worry about whether the other server will interpret the value
the same way it was meant. pg_dump has been aware of this hazard for a
long time, but postgres_fdw needs to deal with it too. To fix data
retrieval from the remote server, set the necessary remote GUC settings at
connection startup. (We were already assuming that settings made then
would persist throughout the remote session.) To fix data transmission to
the remote server, temporarily force the relevant GUCs to the right values
when we're about to convert any data values to text for transmission.
This is all pretty grotty, and not very cheap either. It's tempting to
think of defining one uber-GUC that would override any settings that might
render printed data values unportable. But of course, older remote servers
wouldn't know any such thing and would still need this logic.
While at it, revert commit
f7951eef89be78c50ea2241f593d76dfefe176c9, since
this provides a real fix. (The timestamptz given in the error message
returned from the "remote" server will now reliably be shown in UTC.)
Tom Lane [Mon, 11 Mar 2013 18:26:05 +0000 (14:26 -0400)]
Avoid generating bad remote SQL for INSERT ... DEFAULT VALUES.
"INSERT INTO foo() VALUES ()" is invalid syntax, so don't do that.
Tom Lane [Mon, 11 Mar 2013 16:00:24 +0000 (12:00 -0400)]
Fix thinko in matview patch.
"break" instead of "continue" suppressed view expansion for views appearing
later in the range table. Per report from Erikjan Rijkers.
While at it, improve the associated comment a bit.
Andrew Dunstan [Sun, 10 Mar 2013 21:35:36 +0000 (17:35 -0400)]
JSON generation improvements.
This adds the following:
json_agg(anyrecord) -> json
to_json(any) -> json
hstore_to_json(hstore) -> json (also used as a cast)
hstore_to_json_loose(hstore) -> json
The last provides heuristic treatment of numbers and booleans.
Also, in json generation, if any non-builtin type has a cast to json,
that function is used instead of the type's output function.
Andrew Dunstan, reviewed by Steve Singer.
Catalog version bumped.
Peter Eisentraut [Sun, 10 Mar 2013 21:16:18 +0000 (17:16 -0400)]
doc: Add note about checkpoint_warning vs checkpoint_timeout
suggested by Tianyin Xu
Peter Eisentraut [Sun, 10 Mar 2013 20:54:27 +0000 (16:54 -0400)]
pg_ctl: Adjust nls.mk for split out of wait_error.c
Peter Eisentraut [Sun, 10 Mar 2013 20:53:04 +0000 (16:53 -0400)]
pg_basebackup: Add missing newlines to several error messages
Tom Lane [Sun, 10 Mar 2013 19:07:38 +0000 (15:07 -0400)]
Band-aid for regression test expected-results problem with timestamptz.
We probably need to tell the remote server to use specific timezone and
datestyle settings, and maybe other things. But for now let's just hack
the postgres_fdw regression test to not provoke failures when run in
non-EST5EDT environments. Per buildfarm.
Tom Lane [Sun, 10 Mar 2013 18:14:53 +0000 (14:14 -0400)]
Support writable foreign tables.
This patch adds the core-system infrastructure needed to support updates
on foreign tables, and extends contrib/postgres_fdw to allow updates
against remote Postgres servers. There's still a great deal of room for
improvement in optimization of remote updates, but at least there's basic
functionality there now.
KaiGai Kohei, reviewed by Alexander Korotkov and Laurenz Albe, and rather
heavily revised by Tom Lane.
Magnus Hagander [Sun, 10 Mar 2013 14:54:37 +0000 (15:54 +0100)]
Report pg_hba line number and contents when users fail to log in
Instead of just reporting which user failed to log in, log both the
line number in the active pg_hba.conf file (which may not match reality
in case the file has been edited and not reloaded) and the contents of
the matching line (which will always be correct), to make it easier
to debug incorrect pg_hba.conf files.
The message to the client remains unchanged and does not include this
information, to prevent leaking security sensitive information.
Reviewed by Tom Lane and Dean Rasheed
Heikki Linnakangas [Fri, 8 Mar 2013 15:12:38 +0000 (17:12 +0200)]
Forgot catversion bump in the SP-GiST adjacent support patch.
Heikki Linnakangas [Fri, 8 Mar 2013 13:03:19 +0000 (15:03 +0200)]
SP-GiST support of the range adjacent operator -|-
Alexander Korotkov, reviewed by Jeff Davis.
Heikki Linnakangas [Fri, 8 Mar 2013 09:21:44 +0000 (11:21 +0200)]
Remove unnecessary #ifdef FRONTEND check to choose between strdup and pstrdup.
The libpgcommon patch made that unnecessary, palloc and friends are now
available in frontend programs too, mapped to plain old malloc.
As pointed out by Alvaro Herrera.
Kevin Grittner [Thu, 7 Mar 2013 17:39:36 +0000 (11:39 -0600)]
Fix typo in docs for ALTER MATERIALIZED VIEW.
Fujii Masao
Tom Lane [Thu, 7 Mar 2013 16:51:03 +0000 (11:51 -0500)]
Fix infinite-loop risk in fixempties() stage of regex compilation.
The previous coding of this function could get into situations where it
would never terminate, because successive passes would re-add EMPTY arcs
that had been removed by the previous pass. Rewrite the function
completely using a new algorithm that is guaranteed to terminate, and
also seems to be usually faster than the old one. Per Tcl bugs
3604074
and
3606683.
Tom Lane and Don Porter
Heikki Linnakangas [Thu, 7 Mar 2013 10:18:41 +0000 (12:18 +0200)]
Fix tli history file fetching, broken by the archive after crash recevery patch.
If we were about to enter archive recovery after crash recovery, we scanned
the archive for the latest tli history file, and set the recovery target
timeline to that. However, when we actually tried to read the history file,
we would not fetch the file from the archive, because we were not in archive
recovery yet.
To fix, make readTimeLineHistory and existsTimeLineHistory to always fetch
the file from archive if archive recovery is requested, even if we're not in
archive recovery yet.
Backpatch to 9.2. Mitsumasa KONDO
Tom Lane [Thu, 7 Mar 2013 04:47:38 +0000 (23:47 -0500)]
Arrange to cache FdwRoutine structs in foreign tables' relcache entries.
This saves several catalog lookups per reference. It's not all that
exciting right now, because we'd managed to minimize the number of places
that need to fetch the data; but the upcoming writable-foreign-tables patch
needs this info in a lot more places.
Peter Eisentraut [Thu, 7 Mar 2013 04:45:16 +0000 (23:45 -0500)]
Add fe_memutils.c to nls.mk where used
Robert Haas [Thu, 7 Mar 2013 01:52:06 +0000 (20:52 -0500)]
Code beautification for object-access hook machinery.
KaiGai Kohei
Peter Eisentraut [Thu, 7 Mar 2013 01:25:25 +0000 (20:25 -0500)]
Adjust nls.mk for split out of wait_error.c
Tom Lane [Wed, 6 Mar 2013 23:20:51 +0000 (18:20 -0500)]
Fix missing #include in commands/matview.h.
It needs parsenodes.h to be compilable regardless of previous headers.
Kevin Grittner [Wed, 6 Mar 2013 23:15:34 +0000 (17:15 -0600)]
WAL-log the extension of a new empty MV heap which is being populated.
This page with no tuples is used to distinguish an MV containing a
zero-row resultset of its backing query from an MV which has not
been populated by its backing query. Unless WAL-logged, recovery
and hot standby don't work correctly with what should be an empty
but scannable materialized view.
Fixes bugs reported by Fujii Masao in testing MVs on hot standby.
Kevin Grittner [Wed, 6 Mar 2013 21:35:59 +0000 (15:35 -0600)]
Add docs for pg_matviews, which were missed in the initial MV commit.
Kevin Grittner [Wed, 6 Mar 2013 15:51:49 +0000 (09:51 -0600)]
Fix broken pg_dump for 9.0 and 9.1 caused by the MV patch.
Per report and suggestion from Bernd Helmle
Andrew Dunstan [Wed, 6 Mar 2013 14:53:38 +0000 (09:53 -0500)]
Fix message typo.
Peter Eisentraut [Wed, 6 Mar 2013 04:22:12 +0000 (23:22 -0500)]
pg_ctl: Add comma to message
Andrew Dunstan [Wed, 6 Mar 2013 00:24:29 +0000 (19:24 -0500)]
Remove dependency on the DLL of pythonxx.def file.
This confused Cygwin's make because of the colon in the path. The
DLL isn't likely to change under us so preserving the dependency
doesn't gain us much, and it's useful to be able to do a native
Windows build with the Cygwin mingw toolset.
Noah Misch.
Tom Lane [Tue, 5 Mar 2013 18:02:30 +0000 (13:02 -0500)]
Fix to_char() to use ASCII-only case-folding rules where appropriate.
formatting.c used locale-dependent case folding rules in some code paths
where the result isn't supposed to be locale-dependent, for example
to_char(timestamp, 'DAY'). Since the source data is always just ASCII
in these cases, that usually didn't matter ... but it does matter in
Turkish locales, which have unusual treatment of "i" and "I". To confuse
matters even more, the misbehavior was only visible in UTF8 encoding,
because in single-byte encodings we used pg_toupper/pg_tolower which
don't have locale-specific behavior for ASCII characters. Fix by providing
intentionally ASCII-only case-folding functions and using these where
appropriate. Per bug #7913 from Adnan Dursun. Back-patch to all active
branches, since it's been like this for a long time.
Kevin Grittner [Tue, 5 Mar 2013 11:32:03 +0000 (05:32 -0600)]
Bump catversion because of new function in the materialized view patch.
Tom Lane [Mon, 4 Mar 2013 20:13:31 +0000 (15:13 -0500)]
Fix overflow check in tm2timestamp (this time for sure).
I fixed this code back in commit
841b4a2d5, but didn't think carefully
enough about the behavior near zero, which meant it improperly rejected
1999-12-31 24:00:00. Per report from Magnus Hagander.
Peter Eisentraut [Mon, 4 Mar 2013 03:17:08 +0000 (22:17 -0500)]
psql: Let \l accept a pattern
reviewed by Satoshi Nagayasu
Kevin Grittner [Mon, 4 Mar 2013 00:38:44 +0000 (18:38 -0600)]
Remove accidentally-committed .orig file.
Tom Lane [Mon, 4 Mar 2013 00:32:12 +0000 (19:32 -0500)]
Fix map_sql_value_to_xml_value() to treat domains like their base types.
This was already the case for domains over arrays, but not for domains
over certain built-in types such as boolean. The special formatting
rules for those types should apply to domains over them as well.
Per discussion.
While this is a bug fix, it's also a behavioral change that seems likely
to trip up some applications. So no back-patch.
Pavel Stehule
Kevin Grittner [Mon, 4 Mar 2013 00:23:31 +0000 (18:23 -0600)]
Add a materialized view relations.
A materialized view has a rule just like a view and a heap and
other physical properties like a table. The rule is only used to
populate the table, references in queries refer to the
materialized data.
This is a minimal implementation, but should still be useful in
many cases. Currently data is only populated "on demand" by the
CREATE MATERIALIZED VIEW and REFRESH MATERIALIZED VIEW statements.
It is expected that future releases will add incremental updates
with various timings, and that a more refined concept of defining
what is "fresh" data will be developed. At some point it may even
be possible to have queries use a materialized in place of
references to underlying tables, but that requires the other
above-mentioned features to be working first.
Much of the documentation work by Robert Haas.
Review by Noah Misch, Thom Brown, Robert Haas, Marko Tiikkaja
Security review by KaiGai Kohei, with a decision on how best to
implement sepgsql still pending.
Tom Lane [Mon, 4 Mar 2013 00:05:47 +0000 (19:05 -0500)]
Get rid of any toast table when converting a table to a view.
Also make sure other fields of the view's pg_class entry are appropriate
for a view; it shouldn't have relfrozenxid set for instance.
This ancient omission isn't believed to have any serious consequences in
versions 8.4-9.2, so no backpatch. But let's fix it before it does bite
us in some serious way. It's just luck that the case doesn't cause
problems for autovacuum. (It did cause problems in 8.3, but that's out
of support.)
Andres Freund
Tom Lane [Sun, 3 Mar 2013 22:39:58 +0000 (17:39 -0500)]
Fix SQL function execution to be safe with long-lived FmgrInfos.
fmgr_sql had been designed on the assumption that the FmgrInfo it's called
with has only query lifespan. This is demonstrably unsafe in connection
with range types, as shown in bug #7881 from Andrew Gierth. Fix things
so that we re-generate the function's cache data if the (sub)transaction
it was made in is no longer active.
Back-patch to 9.2. This might be needed further back, but it's not clear
whether the case can realistically arise without range types, so for now
I'll desist from back-patching further.
Peter Eisentraut [Sun, 3 Mar 2013 13:58:34 +0000 (08:58 -0500)]
doc: Small tweak for consistency
submitted by "Lyle"
Peter Eisentraut [Sun, 3 Mar 2013 13:49:49 +0000 (08:49 -0500)]
doc: A few awkward phrasing fixes
Josh Kupershmidt
Peter Eisentraut [Sat, 2 Mar 2013 03:43:47 +0000 (22:43 -0500)]
Exclude utils/probes.h and pg_trace.h from cpluspluscheck
They can include sys/sdt.h from SystemTap, which itself contains C++
code and so won't compile with a C++ compiler under extern "C" linkage.
Tom Lane [Sat, 2 Mar 2013 02:33:34 +0000 (21:33 -0500)]
Eliminate memory leaks in plperl's spi_prepare() function.
Careless use of TopMemoryContext for I/O function data meant that repeated
use of spi_prepare and spi_freeplan would leak memory at the session level,
as per report from Christian Schröder. In addition, spi_prepare
leaked a lot of transient data within the current plperl function's SPI
Proc context, which would be a problem for repeated use of spi_prepare
within a single plperl function call; and it wasn't terribly careful
about releasing permanent allocations in event of an error, either.
In passing, clean up some copy-and-pasteos in query-lookup error messages.
Alex Hunsaker and Tom Lane
Alvaro Herrera [Thu, 28 Feb 2013 19:29:17 +0000 (16:29 -0300)]
Improve pg_upgrade commentary on multixact change
Per gripe from Andres Freund
Andrew Dunstan [Thu, 28 Feb 2013 00:13:07 +0000 (19:13 -0500)]
Flush stderr and stdout in isolation tester.
This is a possibly vain attempt to fix a buffering issue
observed for some MSVC builds.
Heikki Linnakangas [Wed, 27 Feb 2013 19:50:15 +0000 (21:50 +0200)]
Remove spurious "the", and add a missing one.
Thom Brown and me.
Heikki Linnakangas [Wed, 27 Feb 2013 19:31:41 +0000 (21:31 +0200)]
Fix MSVC build.
The new file in src/port needs to be listed in Mkvcbuild.pm as well.
Heikki Linnakangas [Wed, 27 Feb 2013 19:27:01 +0000 (21:27 +0200)]
Fix typo in "pg_xlogdump --help" and error message.
Fujii Masao and me.
Heikki Linnakangas [Wed, 27 Feb 2013 17:17:07 +0000 (19:17 +0200)]
Cannot use WL_SOCKET_WRITEABLE without WL_SOCKET_READABLE.
In copy-out mode, the frontend should not send any messages until the
backend has finished streaming, by sending a CopyDone message. I'm not sure
if it would be legal for the client to send a new query before receiving the
CopyDone message from the backend, but trying to support that would require
bigger changes to the backend code structure.
Fixes an assertion failure reported by Fujii Masao.
Heikki Linnakangas [Wed, 27 Feb 2013 16:42:40 +0000 (18:42 +0200)]
Add standard file header comment to quotes.c.
Heikki Linnakangas [Wed, 27 Feb 2013 16:17:21 +0000 (18:17 +0200)]
Add support for piping COPY to/from an external program.
This includes backend "COPY TO/FROM PROGRAM '...'" syntax, and corresponding
psql \copy syntax. Like with reading/writing files, the backend version is
superuser-only, and in the psql version, the program is run in the client.
In the passing, the psql \copy STDIN/STDOUT syntax is subtly changed: if you
the stdin/stdout is quoted, it's now interpreted as a filename. For example,
"\copy foo from 'stdin'" now reads from a file called 'stdin', not from
standard input. Before this, there was no way to specify a filename called
stdin, stdout, pstdin or pstdout.
This creates a new function in pgport, wait_result_to_str(), which can
be used to convert the exit status of a process, as returned by wait(3),
to a human-readable string.
Etsuro Fujita, reviewed by Amit Kapila.
Tom Lane [Wed, 27 Feb 2013 15:40:03 +0000 (10:40 -0500)]
Add missing error check in regexp parser.
parseqatom() failed to check for an error return (NULL result) from its
recursive call to parsebranch(), and in consequence could crash with a
null-pointer dereference after an error return. This bug has been there
since day one, but wasn't noticed before, probably because most error cases
in parsebranch() didn't actually lead to returning NULL. Add the missing
error check, and also tweak parsebranch() to exit in a less indirect
fashion after a call to parseqatom() fails.
Report by Tomasz Karlik, fix by me.
Tom Lane [Tue, 26 Feb 2013 20:58:34 +0000 (15:58 -0500)]
Add missing .gitignore file.
Tom Lane [Tue, 26 Feb 2013 20:50:22 +0000 (15:50 -0500)]
Clean up "stopgap" implementation of timestamptz_to_str().
Use correct type for "result", fix bogus strftime argument, don't use
unnecessary static variables, improve comments.
Andres Freund and Tom Lane
Tom Lane [Tue, 26 Feb 2013 20:27:30 +0000 (15:27 -0500)]
Install headers from the new src/include/common subdirectory.
This got missed in commit
8396447cdbdff0b62914748de2fec04281dc9114.
Andres Freund
Heikki Linnakangas [Tue, 26 Feb 2013 17:30:15 +0000 (19:30 +0200)]
Remove the check for COPY TO STDIN and COPY FROM STDOUT from ecpg.
The backend grammar treats STDIN and STDOUT completely interchangeable, so
that the above accepted. Arguably that was a mistake the backend grammar,
but it's not ecpg's business to second guess that.
Peter Eisentraut [Mon, 25 Feb 2013 22:58:14 +0000 (17:58 -0500)]
doc: Fix markup typo
Heikki Linnakangas [Mon, 25 Feb 2013 17:53:04 +0000 (19:53 +0200)]
Only quote libpq connection string values that need quoting.
There's no harm in excessive quoting per se, but it makes the strings nicer
to read. The values can get quite unwieldy, when they're first quoted within
within single-quotes when included in the connection string, and then all
the single-quotes are escaped when the connection string is passed as a
shell argument.
Heikki Linnakangas [Mon, 25 Feb 2013 17:39:10 +0000 (19:39 +0200)]
Add -d option to pg_dumpall, for specifying a connection string.
Like with pg_basebackup and pg_receivexlog, it's a bit strange to call the
option -d/--dbname, when in fact you cannot pass a database name in it.
Original patch by Amit Kapila, heavily modified by me.
Heikki Linnakangas [Mon, 25 Feb 2013 17:39:04 +0000 (19:39 +0200)]
Add -d/--dbname option to pg_dump.
You could already pass a database name just by passing it as the last
option, without -d. This is an alias for that, like the -d/--dbname option
in psql and many other client applications. For consistency.
Andrew Dunstan [Mon, 25 Feb 2013 17:00:53 +0000 (12:00 -0500)]
Redo MSVC build implementation for pg_xlogdump.
The previous commit didn't work on MSVC editions earlier than
Visual Studio 2011, apparently. This works by copying files into the
contrib directory, and making provision to clean them up, which should
work on all editions.
Heikki Linnakangas [Mon, 25 Feb 2013 12:48:27 +0000 (14:48 +0200)]
Add -d option to pg_basebackup and pg_receivexlog, for connection string.
Without this, there's no way to pass arbitrary libpq connection parameters
to these applications. It's a bit strange that the option is called
-d/--dbname, when in fact you can *not* pass a database name in it, but it's
consistent with other client applications where a connection string is also
passed using -d.
Original patch by Amit Kapila, heavily modified by me.
Andrew Dunstan [Mon, 25 Feb 2013 01:28:42 +0000 (20:28 -0500)]
Provide MSVC build setup for pg_xlogdump.
Peter Eisentraut [Sun, 24 Feb 2013 20:38:07 +0000 (15:38 -0500)]
doc: Remove PostgreSQL version number from xml2 deprecation notice
It is obviously no longer true.
Tom Lane [Sun, 24 Feb 2013 13:58:00 +0000 (08:58 -0500)]
Fix build of contrib/pg_xlogdump.
rmgrdesc.c is not auto-generated now, though it apparently was the last
time the Makefile was updated.
Peter Eisentraut [Sun, 24 Feb 2013 04:30:14 +0000 (23:30 -0500)]
Correct tense in log message