users/andresfreund/postgres.git
10 years agoStatistics code.
Robert Haas [Mon, 30 Jul 2012 16:22:12 +0000 (16:22 +0000)]
Statistics code.

10 years agoImprove comments about gc_next.
Robert Haas [Mon, 30 Jul 2012 15:49:18 +0000 (15:49 +0000)]
Improve comments about gc_next.

10 years agoCode rearrangement. Cosmetic only.
Robert Haas [Mon, 30 Jul 2012 13:27:10 +0000 (13:27 +0000)]
Code rearrangement.  Cosmetic only.

10 years agoAnother test case.
Robert Haas [Fri, 27 Jul 2012 18:28:04 +0000 (18:28 +0000)]
Another test case.

10 years agoFix another bug related to marked CHashPtrs.
Robert Haas [Fri, 27 Jul 2012 18:19:47 +0000 (18:19 +0000)]
Fix another bug related to marked CHashPtrs.

10 years agoImprove testing code to better diagnose concurrency bugs.
Robert Haas [Fri, 27 Jul 2012 17:49:12 +0000 (17:49 +0000)]
Improve testing code to better diagnose concurrency bugs.

10 years agoDon't bogusly propagate delete-marks.
Robert Haas [Fri, 27 Jul 2012 17:29:26 +0000 (17:29 +0000)]
Don't bogusly propagate delete-marks.

10 years agoAdd missing else.
Robert Haas [Fri, 27 Jul 2012 16:36:07 +0000 (16:36 +0000)]
Add missing else.

10 years agoThinko: of course, invalid CHashPtrs can also be delete-marked.
Robert Haas [Fri, 27 Jul 2012 16:34:50 +0000 (16:34 +0000)]
Thinko: of course, invalid CHashPtrs can also be delete-marked.

10 years agoConcurrency test function for chash.
Robert Haas [Fri, 27 Jul 2012 16:10:13 +0000 (16:10 +0000)]
Concurrency test function for chash.

10 years agoStupid bug fix.
Robert Haas [Fri, 27 Jul 2012 15:44:58 +0000 (15:44 +0000)]
Stupid bug fix.

10 years agoSeparate dynahash insert, search, delete tests.
Robert Haas [Fri, 27 Jul 2012 15:03:00 +0000 (11:03 -0400)]
Separate dynahash insert, search, delete tests.

10 years agoSeparate chash insert, search, delete tests.
Robert Haas [Fri, 27 Jul 2012 15:03:00 +0000 (11:03 -0400)]
Separate chash insert, search, delete tests.

10 years agoTest code for deletes, and associated bug fixes.
Robert Haas [Fri, 27 Jul 2012 04:22:47 +0000 (00:22 -0400)]
Test code for deletes, and associated bug fixes.

10 years agoAdd cleanup scan logic.
Robert Haas [Fri, 27 Jul 2012 04:14:08 +0000 (00:14 -0400)]
Add cleanup scan logic.

10 years agoBug fixes.
Robert Haas [Fri, 27 Jul 2012 03:51:08 +0000 (23:51 -0400)]
Bug fixes.

10 years agoUnify scan code.
Robert Haas [Thu, 26 Jul 2012 21:43:15 +0000 (17:43 -0400)]
Unify scan code.

10 years agoFurther simplifications.
Robert Haas [Thu, 26 Jul 2012 19:51:04 +0000 (15:51 -0400)]
Further simplifications.

10 years agoUpdate comments.
Robert Haas [Thu, 26 Jul 2012 19:24:19 +0000 (15:24 -0400)]
Update comments.

10 years agoAdapt code to use compare-and-swap.
Robert Haas [Thu, 26 Jul 2012 18:45:10 +0000 (14:45 -0400)]
Adapt code to use compare-and-swap.

10 years agoCHashAddToGarbage
Robert Haas [Thu, 26 Jul 2012 16:50:12 +0000 (12:50 -0400)]
CHashAddToGarbage

10 years agoFirst attempt at CHashDelete - slightly incomplete, and untested.
Robert Haas [Wed, 25 Jul 2012 21:10:29 +0000 (17:10 -0400)]
First attempt at CHashDelete - slightly incomplete, and untested.

10 years agoMore micro-optimization.
Robert Haas [Wed, 25 Jul 2012 20:05:50 +0000 (16:05 -0400)]
More micro-optimization.

10 years agoFix stupid thinko.
Robert Haas [Wed, 25 Jul 2012 17:39:55 +0000 (13:39 -0400)]
Fix stupid thinko.

10 years agoTime inserts, searches.
Robert Haas [Wed, 25 Jul 2012 16:24:24 +0000 (12:24 -0400)]
Time inserts, searches.

10 years agoSome micro-optimization and code beautification.
Robert Haas [Wed, 25 Jul 2012 16:18:31 +0000 (12:18 -0400)]
Some micro-optimization and code beautification.

10 years agoShow shared memory allocated for each hash table.
Robert Haas [Wed, 25 Jul 2012 15:58:47 +0000 (11:58 -0400)]
Show shared memory allocated for each hash table.

10 years agoImprove dynahash test code.
Robert Haas [Wed, 25 Jul 2012 15:35:47 +0000 (11:35 -0400)]
Improve dynahash test code.

10 years agoBeginnings of dynahash testing code.
Robert Haas [Wed, 25 Jul 2012 14:52:54 +0000 (10:52 -0400)]
Beginnings of dynahash testing code.

10 years agoAvoid leaking nodes on a failed insert.
Robert Haas [Wed, 25 Jul 2012 14:21:40 +0000 (10:21 -0400)]
Avoid leaking nodes on a failed insert.

10 years agoBetter debugging code, another bug fix.
Robert Haas [Wed, 25 Jul 2012 14:12:06 +0000 (10:12 -0400)]
Better debugging code, another bug fix.

10 years agoMore bug fixing.
Robert Haas [Wed, 25 Jul 2012 14:02:53 +0000 (10:02 -0400)]
More bug fixing.

10 years agoMore debugging code.
Robert Haas [Wed, 25 Jul 2012 13:59:03 +0000 (09:59 -0400)]
More debugging code.

10 years agoRemove debugging code.
Robert Haas [Wed, 25 Jul 2012 12:57:36 +0000 (08:57 -0400)]
Remove debugging code.

10 years agoTesting code and resulting bug fixes.
Robert Haas [Wed, 25 Jul 2012 04:21:37 +0000 (00:21 -0400)]
Testing code and resulting bug fixes.

10 years agoAn attempt at making insertion work.
Robert Haas [Tue, 24 Jul 2012 16:30:41 +0000 (12:30 -0400)]
An attempt at making insertion work.

10 years agoTabify.
Robert Haas [Tue, 24 Jul 2012 12:59:26 +0000 (08:59 -0400)]
Tabify.

10 years agoStart of work on GC.
Robert Haas [Sat, 14 Jul 2012 05:44:22 +0000 (01:44 -0400)]
Start of work on GC.

10 years agoMore initialization code.
Robert Haas [Fri, 13 Jul 2012 23:09:26 +0000 (19:09 -0400)]
More initialization code.

10 years agoSupport dependency barriers.
Robert Haas [Fri, 13 Jul 2012 20:33:41 +0000 (16:33 -0400)]
Support dependency barriers.

13 years agoFirst attempt at CHashSearch.
Robert Haas [Fri, 13 Jul 2012 20:25:35 +0000 (16:25 -0400)]
First attempt at CHashSearch.

13 years agoMore work on chash. Initialization theoretically works now.
Robert Haas [Fri, 13 Jul 2012 05:38:37 +0000 (01:38 -0400)]
More work on chash.  Initialization theoretically works now.

13 years agoStart of work on chash.
Robert Haas [Wed, 4 Jul 2012 18:50:19 +0000 (14:50 -0400)]
Start of work on chash.

10 years agoIncrease number of hash join buckets for underestimate.
Kevin Grittner [Mon, 13 Oct 2014 15:16:36 +0000 (10:16 -0500)]
Increase number of hash join buckets for underestimate.

If we expect batching at the very beginning, we size nbuckets for
"full work_mem" (see how many tuples we can get into work_mem,
while not breaking NTUP_PER_BUCKET threshold).

If we expect to be fine without batching, we start with the 'right'
nbuckets and track the optimal nbuckets as we go (without actually
resizing the hash table). Once we hit work_mem (considering the
optimal nbuckets value), we keep the value.

At the end of the first batch, we check whether (nbuckets !=
nbuckets_optimal) and resize the hash table if needed. Also, we
keep this value for all batches (it's OK because it assumes full
work_mem, and it makes the batchno evaluation trivial). So the
resize happens only once.

There could be cases where it would improve performance to allow
the NTUP_PER_BUCKET threshold to be exceeded to keep everything in
one batch rather than spilling to a second batch, but attempts to
generate such a case have so far been unsuccessful; that issue may
be addressed with a follow-on patch after further investigation.

Tomas Vondra with minor format and comment cleanup by me
Reviewed by Robert Haas, Heikki Linnakangas, and Kevin Grittner

10 years agoFix quoting in the add_to_path Makefile macro.
Noah Misch [Mon, 13 Oct 2014 03:33:37 +0000 (23:33 -0400)]
Fix quoting in the add_to_path Makefile macro.

The previous quoting caused "make -C src/bin check" to ignore, rather
than add to, any LD_LIBRARY_PATH content from the environment.
Back-patch to 9.4, where the macro was introduced.

10 years agopg_ctl: Cast DWORD values to avoid -Wformat warnings.
Noah Misch [Mon, 13 Oct 2014 03:33:19 +0000 (23:33 -0400)]
pg_ctl: Cast DWORD values to avoid -Wformat warnings.

This affects pg_ctl alone, because pg_ctl takes the exceptional step of
calling Windows API functions in a Cygwin build.

10 years agoSuppress dead, unportable src/port/crypt.c code.
Noah Misch [Mon, 13 Oct 2014 03:27:06 +0000 (23:27 -0400)]
Suppress dead, unportable src/port/crypt.c code.

This file used __int64, which is specific to native Windows, rather than
int64.  Suppress the long-unused union field of this type.  Noticed on
Cygwin x86_64 with -lcrypt not installed.  Back-patch to 9.0 (all
supported versions).

10 years agopg_recvlogical: Improve --help output
Peter Eisentraut [Sun, 12 Oct 2014 05:45:25 +0000 (01:45 -0400)]
pg_recvlogical: Improve --help output

List the actions first, as they are the most important options.  Group
the other options more sensibly, consistent with the man page.  Correct
a few typographical errors, clarify some things.

Also update the pg_receivexlog --help output to make it a bit more
consistent with that of pg_recvlogical.

10 years agoMessage improvements
Peter Eisentraut [Sun, 12 Oct 2014 05:02:56 +0000 (01:02 -0400)]
Message improvements

10 years agopg_upgrade: prefix Unix shell script name output with "./"
Bruce Momjian [Sat, 11 Oct 2014 22:38:41 +0000 (18:38 -0400)]
pg_upgrade:  prefix Unix shell script name output with "./"

This more clearly suggests the current directory.  While this also works
on Windows, it might be confusing.

Report by Christoph Berg

10 years agodocs: remove mention that attnotnull should be changed
Bruce Momjian [Sat, 11 Oct 2014 21:23:57 +0000 (17:23 -0400)]
docs:  remove mention that attnotnull should be changed

Report by Andres Freund

10 years agoregression: adjust polygon diagrams to not use tabs
Bruce Momjian [Sat, 11 Oct 2014 21:14:16 +0000 (17:14 -0400)]
regression:  adjust polygon diagrams to not use tabs

Also, small diagram adjustments

Patch by Emre Hasegeli

10 years agoImprove documentation about JSONB array containment behavior.
Tom Lane [Sat, 11 Oct 2014 18:29:51 +0000 (14:29 -0400)]
Improve documentation about JSONB array containment behavior.

Per gripe from Josh Berkus.

10 years agoFix bogus optimization in JSONB containment tests.
Tom Lane [Sat, 11 Oct 2014 18:13:51 +0000 (14:13 -0400)]
Fix bogus optimization in JSONB containment tests.

When determining whether one JSONB object contains another, it's okay to
make a quick exit if the first object has fewer pairs than the second:
because we de-duplicate keys within objects, it is impossible that the
first object has all the keys the second does.  However, the code was
applying this rule to JSONB arrays as well, where it does *not* hold
because arrays can contain duplicate entries.  The test was really in
the wrong place anyway; we should do it within JsonbDeepContains, where
it can be applied to nested objects not only top-level ones.

Report and test cases by Alexander Korotkov; fix by Peter Geoghegan and
Tom Lane.

10 years agoRemove unnecessary initialization of local variables.
Heikki Linnakangas [Fri, 10 Oct 2014 10:00:53 +0000 (13:00 +0300)]
Remove unnecessary initialization of local variables.

Oops, forgot these in the prveious commit.

10 years agoChange the way encoding and locale checks are done in pg_upgrade.
Heikki Linnakangas [Fri, 10 Oct 2014 06:59:44 +0000 (09:59 +0300)]
Change the way encoding and locale checks are done in pg_upgrade.

Lc_collate and lc_ctype have been per-database settings since server version
8.4, but pg_upgrade was still treating them as cluster-wide options. It
fetched the values for the template0 databases in old and new cluster, and
compared them. That's backwards; the encoding and locale of the template0
database doesn't matter, as template0 is guaranteed to contain only ASCII
characters. But if there are any other databases that exist on both clusters
(in particular template1 and postgres databases), their encodings and
locales must be compatible.

Also, make the locale comparison more lenient. If the locale names are not
equal, try to canonicalize both of them by passing them to setlocale(). We
used to do that only when upgrading from 9.1 or below, but it seems like a
good idea even with newer versions. If we change the canonical form of a
locale, this allows pg_upgrade to still work. I'm about to do just that to
fix bug #11431, by mapping a locale name that contains non-ASCII characters
to a pure-ASCII alias of the same locale.

No backpatching, because earlier versions of pg_upgrade still support
upgrading from 8.3 servers. That would be more complicated, so it doesn't
seem worth it, given that we haven't received any complaints about this
from users.

10 years agoFix broken example in PL/pgSQL document.
Fujii Masao [Thu, 9 Oct 2014 18:18:01 +0000 (03:18 +0900)]
Fix broken example in PL/pgSQL document.

Back-patch to all supported branches.

Marti Raudsepp, per a report from Marko Tiikkaja

10 years agoSplit builtins.h to a new header ruleutils.h
Alvaro Herrera [Wed, 8 Oct 2014 21:10:47 +0000 (18:10 -0300)]
Split builtins.h to a new header ruleutils.h

The new header contains many prototypes for functions in ruleutils.c
that are not exposed to the SQL level.

Reviewed by Andres Freund and Michael Paquier.

10 years agoExtend shm_mq API with new functions shm_mq_sendv, shm_mq_set_handle.
Robert Haas [Wed, 8 Oct 2014 18:35:43 +0000 (14:35 -0400)]
Extend shm_mq API with new functions shm_mq_sendv, shm_mq_set_handle.

shm_mq_sendv sends a message to the queue assembled from multiple
locations.  This is expected to be used by forthcoming patches to
allow frontend/backend protocol messages to be sent via shm_mq, but
might be useful for other purposes as well.

shm_mq_set_handle associates a BackgroundWorkerHandle with an
already-existing shm_mq_handle.  This solves a timing problem when
creating a shm_mq to communicate with a newly-launched background
worker: if you attach to the queue first, and the background worker
fails to start, you might block forever trying to do I/O on the queue;
but if you start the background worker first, but then die before
attaching to the queue, the background worrker might block forever
trying to do I/O on the queue.  This lets you attach before starting
the worker (so that the worker is protected) and then associate the
BackgroundWorkerHandle later (so that you are also protected).

Patch by me, reviewed by Stephen Frost.

11 years agoImplement SKIP LOCKED for row-level locks
Alvaro Herrera [Tue, 7 Oct 2014 20:23:34 +0000 (17:23 -0300)]
Implement SKIP LOCKED for row-level locks

This clause changes the behavior of SELECT locking clauses in the
presence of locked rows: instead of causing a process to block waiting
for the locks held by other processes (or raise an error, with NOWAIT),
SKIP LOCKED makes the new reader skip over such rows.  While this is not
appropriate behavior for general purposes, there are some cases in which
it is useful, such as queue-like tables.

Catalog version bumped because this patch changes the representation of
stored rules.

Reviewed by Craig Ringer (based on a previous attempt at an
implementation by Simon Riggs, who also provided input on the syntax
used in the current patch), David Rowley, and Γlvaro Herrera.

Author: Thomas Munro

11 years agoFix typo in elog message.
Robert Haas [Tue, 7 Oct 2014 04:08:59 +0000 (00:08 -0400)]
Fix typo in elog message.

11 years agoFix array overrun in ecpg's version of ParseDateTime().
Tom Lane [Tue, 7 Oct 2014 01:23:20 +0000 (21:23 -0400)]
Fix array overrun in ecpg's version of ParseDateTime().

The code wrote a value into the caller's field[] array before checking
to see if there was room, which of course is backwards.  Per report from
Michael Paquier.

I fixed the equivalent bug in the backend's version of this code way back
in 630684d3a130bb93, but failed to think about ecpg's copy.  Fortunately
this doesn't look like it would be exploitable for anything worse than a
core dump: an external attacker would have no control over the single word
that gets written.

11 years agoClean up Create/DropReplicationSlot query buffer
Stephen Frost [Mon, 6 Oct 2014 15:18:13 +0000 (11:18 -0400)]
Clean up Create/DropReplicationSlot query buffer

CreateReplicationSlot() and DropReplicationSlot() were not cleaning up
the query buffer in some cases (mostly error conditions) which meant a
small leak.  Not generally an issue as the error case would result in an
immediate exit, but not difficult to fix either and reduces the number
of false positives from code analyzers.

In passing, also add appropriate PQclear() calls to RunIdentifySystem().

Pointed out by Coverity.

11 years agoAdd support for managing physical replication slots to pg_receivexlog.
Andres Freund [Mon, 6 Oct 2014 10:51:37 +0000 (12:51 +0200)]
Add support for managing physical replication slots to pg_receivexlog.

pg_receivexlog already has the capability to use a replication slot to
reserve WAL on the upstream node. But the used slot currently has to
be created via SQL.

To allow using slots directly, without involving SQL, add
--create-slot and --drop-slot actions, analogous to the logical slot
manipulation support in pg_recvlogical.

Author: Michael Paquier
Discussion: CABUevEx+zrOHZOQg+dPapNPFRJdsk59b=TSVf30Z71GnFXhQaw@mail.gmail.com

11 years agoRename pg_recvlogical's --create/--drop to --create-slot/--drop-slot.
Andres Freund [Mon, 6 Oct 2014 10:11:52 +0000 (12:11 +0200)]
Rename pg_recvlogical's --create/--drop to --create-slot/--drop-slot.

A future patch (9.5 only) adds slot management to pg_receivexlog. The
verbs create/drop don't seem descriptive enough there. It seems better
to rename pg_recvlogical's commands now, in beta, than live with the
inconsistency forever.

The old form (e.g. --drop) will still be accepted by virtue of most
getopt_long() options accepting abbreviations for long commands.

Backpatch to 9.4 where pg_recvlogical was introduced.

Author: Michael Paquier and Andres Freund
Discussion: CAB7nPqQtt79U6FmhwvgqJmNyWcVCbbV-nS72j_jyPEopERg9rg@mail.gmail.com

11 years agoTranslation updates
Peter Eisentraut [Mon, 6 Oct 2014 03:22:24 +0000 (23:22 -0400)]
Translation updates

11 years agoUpdate 9.4 release notes for commits through today.
Tom Lane [Sun, 5 Oct 2014 18:14:04 +0000 (14:14 -0400)]
Update 9.4 release notes for commits through today.

Add entries for recent changes, including noting the JSONB format change
and the recent timezone data changes.  We should remove those two items
before 9.4 final: the JSONB change will be of no interest in the long
run, and it's not normally our habit to mention timezone updates in
major-release notes.  But it seems important to document them temporarily
for beta testers.

I failed to resist the temptation to wordsmith a couple of existing
entries, too.

11 years agoEliminate one background-worker-related flag variable.
Robert Haas [Sun, 5 Oct 2014 01:25:41 +0000 (21:25 -0400)]
Eliminate one background-worker-related flag variable.

Teach sigusr1_handler() to use the same test for whether a worker
might need to be started as ServerLoop().  Aside from being perhaps
a bit simpler, this prevents a potentially-unbounded delay when
starting a background worker.  On some platforms, select() doesn't
return when interrupted by a signal, but is instead restarted,
including a reset of the timeout to the originally-requested value.
If signals arrive often enough, but no connection requests arrive,
sigusr1_handler() will be executed repeatedly, but the body of
ServerLoop() won't be reached.  This change ensures that, even in
that case, background workers will eventually get launched.

This is far from a perfect fix; really, we need select() to return
control to ServerLoop() after an interrupt, either via the self-pipe
trick or some other mechanism.  But that's going to require more
work and discussion, so let's do this for now to at least mitigate
the damage.

Per investigation of test_shm_mq failures on buildfarm member anole.

11 years agoUpdate time zone data files to tzdata release 2014h.
Tom Lane [Sat, 4 Oct 2014 18:18:19 +0000 (14:18 -0400)]
Update time zone data files to tzdata release 2014h.

Most zones in the Russian Federation are subtracting one or two hours
as of 2014-10-26.  Update the meanings of the abbreviations IRKT, KRAT,
MAGT, MSK, NOVT, OMST, SAKT, VLAT, YAKT, YEKT to match.

The IANA timezone database has adopted abbreviations of the form AxST/AxDT
for all Australian time zones, reflecting what they believe to be current
majority practice Down Under.  These names do not conflict with usage
elsewhere (other than ACST for Acre Summer Time, which has been in disuse
since 1994).  Accordingly, adopt these names into our "Default" timezone
abbreviation set.  The "Australia" abbreviation set now contains only
CST,EAST,EST,SAST,SAT,WST, all of which are thought to be mostly historical
usage.  Note that SAST has also been changed to be South Africa Standard
Time in the "Default" abbreviation set.

Add zone abbreviations SRET (Asia/Srednekolymsk) and XJT (Asia/Urumqi),
and use WSST/WSDT for western Samoa.

Also a DST law change in the Turks & Caicos Islands (America/Grand_Turk),
and numerous corrections for historical time zone data.

11 years agoUpdate time zone abbreviations lists.
Tom Lane [Fri, 3 Oct 2014 21:44:38 +0000 (17:44 -0400)]
Update time zone abbreviations lists.

This updates known_abbrevs.txt to be what it should have been already,
were my -P patch not broken; and updates some tznames/ entries that
missed getting any love in previous timezone data updates because zic
failed to flag the change of abbreviation.

The non-cosmetic updates:

* Remove references to "ADT" as "Arabia Daylight Time", an abbreviation
that's been out of use since 2007; therefore, claiming there is a conflict
with "Atlantic Daylight Time" doesn't seem especially helpful.  (We have
left obsolete entries in the files when they didn't conflict with anything,
but that seems like a different situation.)

* Fix entirely incorrect GMT offsets for CKT (Cook Islands), FJT, FJST
(Fiji); we didn't even have them on the proper side of the date line.
(Seems to have been aboriginal errors in our tznames data; there's no
evidence anything actually changed recently.)

* FKST (Falkland Islands Summer Time) is now used all year round, so
don't mark it as a DST abbreviation.

* Update SAKT (Sakhalin) to mean GMT+11 not GMT+10.

In cosmetic changes, I fixed a bunch of wrong (or at least obsolete)
claims about abbreviations not being present in the zic files, and
tried to be consistent about how obsolete abbreviations are labeled.

Note the underlying timezone/data files are still at release 2014e;
this is just trying to get us in sync with what those files actually
say before we go to the next update.

11 years agoFix CreatePolicy, pg_dump -v; psql and doc updates
Stephen Frost [Fri, 3 Oct 2014 20:31:53 +0000 (16:31 -0400)]
Fix CreatePolicy, pg_dump -v; psql and doc updates

Peter G pointed out that valgrind was, rightfully, complaining about
CreatePolicy() ending up copying beyond the end of the parsed policy
name.  Name is a fixed-size type and we need to use namein (through
DirectFunctionCall1()) to flush out the entire array before we pass
it down to heap_form_tuple.

Michael Paquier pointed out that pg_dump --verbose was missing a
newline and FabrΓ­zio de Royes Mello further pointed out that the
schema was also missing from the messages, so fix those also.

Also, based on an off-list comment from Kevin, rework the psql \d
output to facilitate copy/pasting into a new CREATE or ALTER POLICY
command.

Lastly, improve the pg_policies view and update the documentation for
it, along with a few other minor doc corrections based on an off-list
discussion with Adam Brightwell.

11 years agoFix bogus logic for zic -P option.
Tom Lane [Fri, 3 Oct 2014 18:48:11 +0000 (14:48 -0400)]
Fix bogus logic for zic -P option.

The quick hack I added to zic to dump out currently-in-use timezone
abbreviations turns out to have a nasty bug: within each zone, it was
printing the last "struct ttinfo" to be *defined*, not necessarily the
last one in use.  This was mainly a problem in zones that had changed the
meaning of their zone abbreviation (to another GMT offset value) and later
changed it back.

As a result of this error, we'd missed out updating the tznames/ files
for some jurisdictions that have changed their zone abbreviations since
the tznames/ files were originally created.  I'll address the missing data
updates in a separate commit.

11 years agoDon't balance vacuum cost delay when per-table settings are in effect
Alvaro Herrera [Fri, 3 Oct 2014 16:01:27 +0000 (13:01 -0300)]
Don't balance vacuum cost delay when per-table settings are in effect

When there are cost-delay-related storage options set for a table,
trying to make that table participate in the autovacuum cost-limit
balancing algorithm produces undesirable results: instead of using the
configured values, the global values are always used,
as illustrated by Mark Kirkwood in
http://www.postgresql.org/message-id/52FACF15.8020507@catalyst.net.nz

Since the mechanism is already complicated, just disable it for those
cases rather than trying to make it cope.  There are undesirable
side-effects from this too, namely that the total I/O impact on the
system will be higher whenever such tables are vacuumed.  However, this
is seen as less harmful than slowing down vacuum, because that would
cause bloat to accumulate.  Anyway, in the new system it is possible to
tweak options to get the precise behavior one wants, whereas with the
previous system one was simply hosed.

This has been broken forever, so backpatch to all supported branches.
This might affect systems where cost_limit and cost_delay have been set
for individual tables.

11 years agoFix typos in comments.
Robert Haas [Fri, 3 Oct 2014 15:47:27 +0000 (11:47 -0400)]
Fix typos in comments.

Etsuro Fujita

11 years agoStill another typo fix for 0709b7ee72e4bc71ad07b7120acd117265ab51d0.
Robert Haas [Fri, 3 Oct 2014 15:25:28 +0000 (11:25 -0400)]
Still another typo fix for 0709b7ee72e4bc71ad07b7120acd117265ab51d0.

Buildfarm member anole caught this one.

11 years agoCheck for GiST index tuples that don't fit on a page.
Heikki Linnakangas [Fri, 3 Oct 2014 09:07:10 +0000 (12:07 +0300)]
Check for GiST index tuples that don't fit on a page.

The page splitting code would go into infinite recursion if you try to
insert an index tuple that doesn't fit even on an empty page.

Per analysis and suggested fix by Andrew Gierth. Fixes bug #11555, reported
by Bryan Seitz (analysis happened over IRC). Backpatch to all supported
versions.

11 years agoFix documentation for CREATE SEQUENCE IF NOT EXISTS.
Heikki Linnakangas [Fri, 3 Oct 2014 07:24:10 +0000 (10:24 +0300)]
Fix documentation for CREATE SEQUENCE IF NOT EXISTS.

The [ IF NOT EXISTS ] was put in wrong place in the syntax.

Pointed out by Marti Raudsepp.

11 years agoIncrease the number of buffer mapping partitions to 128.
Robert Haas [Thu, 2 Oct 2014 17:58:50 +0000 (13:58 -0400)]
Increase the number of buffer mapping partitions to 128.

Testing by Amit Kapila, Andres Freund, and myself, with and without
other patches that also aim to improve scalability, seems to indicate
that this change is a significant win over the current value and over
smaller values such as 64.  It's not clear how high we can push this
value before it starts to have negative side-effects elsewhere, but
going this far looks OK.

11 years agoInstall all headers for the new atomics API.
Andres Freund [Thu, 2 Oct 2014 14:39:36 +0000 (16:39 +0200)]
Install all headers for the new atomics API.

Previously, by mistake, only atomics.h was installed.

Kohei KaiGai

11 years agoFix typo in error message.
Heikki Linnakangas [Thu, 2 Oct 2014 12:51:31 +0000 (15:51 +0300)]
Fix typo in error message.

11 years agoRefactor pgbench log-writing code to a separate function.
Heikki Linnakangas [Thu, 2 Oct 2014 09:58:14 +0000 (12:58 +0300)]
Refactor pgbench log-writing code to a separate function.

The doCustom function was incredibly long, this makes it a little bit more
readable.

11 years agoFix some more problems with nested append relations.
Tom Lane [Wed, 1 Oct 2014 23:30:24 +0000 (19:30 -0400)]
Fix some more problems with nested append relations.

As of commit a87c72915 (which later got backpatched as far as 9.1),
we're explicitly supporting the notion that append relations can be
nested; this can occur when UNION ALL constructs are nested, or when
a UNION ALL contains a table with inheritance children.

Bug #11457 from Nelson Page, as well as an earlier report from Elvis
Pranskevichus, showed that there were still nasty bugs associated with such
cases: in particular the EquivalenceClass mechanism could try to generate
"join" clauses connecting an appendrel child to some grandparent appendrel,
which would result in assertion failures or bogus plans.

Upon investigation I concluded that all current callers of
find_childrel_appendrelinfo() need to be fixed to explicitly consider
multiple levels of parent appendrels.  The most complex fix was in
processing of "broken" EquivalenceClasses, which are ECs for which we have
been unable to generate all the derived equality clauses we would like to
because of missing cross-type equality operators in the underlying btree
operator family.  That code path is more or less entirely untested by
the regression tests to date, because no standard opfamilies have such
holes in them.  So I wrote a new regression test script to try to exercise
it a bit, which turned out to be quite a worthwhile activity as it exposed
existing bugs in all supported branches.

The present patch is essentially the same as far back as 9.2, which is
where parameterized paths were introduced.  In 9.0 and 9.1, we only need
to back-patch a small fragment of commit 5b7b5518d, which fixes failure to
propagate out the original WHERE clauses when a broken EC contains constant
members.  (The regression test case results show that these older branches
are noticeably stupider than 9.2+ in terms of the quality of the plans
generated; but we don't really care about plan quality in such cases,
only that the plan not be outright wrong.  A more invasive fix in the
older branches would not be a good idea anyway from a plan-stability
standpoint.)

11 years agoRefactor replication connection code of various pg_basebackup utilities.
Andres Freund [Wed, 1 Oct 2014 15:22:21 +0000 (17:22 +0200)]
Refactor replication connection code of various pg_basebackup utilities.

Move some more code to manage replication connection command to
streamutil.c. A later patch will introduce replication slot via
pg_receivexlog and this avoid duplicating relevant code between
pg_receivexlog and pg_recvlogical.

Author: Michael Paquier, with some editing by me.

11 years agopg_recvlogical.c code review.
Andres Freund [Mon, 29 Sep 2014 13:35:40 +0000 (15:35 +0200)]
pg_recvlogical.c code review.

Several comments still referred to 'initiating', 'freeing', 'stopping'
replication slots. These were terms used during different phases of
the development of logical decoding, but are no long accurate.

Also rename StreamLog() to StreamLogicalLog() and add 'void' to the
prototype.

Author: Michael Paquier, with some editing by me.

Backpatch to 9.4 where pg_recvlogical was introduced.

11 years agoRemove num_xloginsert_locks GUC, replace with a #define
Heikki Linnakangas [Wed, 1 Oct 2014 13:37:15 +0000 (16:37 +0300)]
Remove num_xloginsert_locks GUC, replace with a #define

I left the GUC in place for the beta period, so that people could experiment
with different values. No-one's come up with any data that a different value
would be better under some circumstances, so rather than try to document to
users what the GUC, let's just hard-code the current value, 8.

11 years agoBlock signals while computing the sleep time in postmaster's main loop.
Andres Freund [Wed, 1 Oct 2014 12:23:43 +0000 (14:23 +0200)]
Block signals while computing the sleep time in postmaster's main loop.

DetermineSleepTime() was previously called without blocked
signals. That's not good, because it allows signal handlers to
interrupt its workings.

DetermineSleepTime() was added in 9.3 with the addition of background
workers (da07a1e856511), where it only read from
BackgroundWorkerList.

Since 9.4, where dynamic background workers were added (7f7485a0cde),
the list is also manipulated in DetermineSleepTime(). That's bad
because the list now can be persistently corrupted if modified by both
a signal handler and DetermineSleepTime().

This was discovered during the investigation of hangs on buildfarm
member anole. It's unclear whether this bug is the source of these
hangs or not, but it's worth fixing either way. I have confirmed that
it can cause crashes.

It luckily looks like this only can cause problems when bgworkers are
actively used.

Discussion: 20140929193733.GB14400@awork2.anarazel.de

Backpatch to 9.3 where background workers were introduced.

11 years agoAdd functions for dealing with PGP armor header lines to pgcrypto.
Heikki Linnakangas [Wed, 1 Oct 2014 12:56:26 +0000 (15:56 +0300)]
Add functions for dealing with PGP armor header lines to pgcrypto.

This add a new pgp_armor_headers function to extract armor headers from an
ASCII-armored blob, and a new overloaded variant of the armor function, for
constructing an ASCII-armor with extra headers.

Marko Tiikkaja and me.

11 years agoImprove documentation about binary/textual output mode for output plugins.
Andres Freund [Wed, 1 Oct 2014 11:13:59 +0000 (13:13 +0200)]
Improve documentation about binary/textual output mode for output plugins.

Also improve related error message as it contributed to the confusion.

Discussion: CAB7nPqQrqFzjqCjxu4GZzTrD9kpj6HMn9G5aOOMwt1WZ8NfqeA@mail.gmail.com,
    CAB7nPqQXc_+g95zWnqaa=mVQ4d3BVRs6T41frcEYi2ocUrR3+A@mail.gmail.com

Per discussion between Michael Paquier, Robert Haas and Andres Freund

Backpatch to 9.4 where logical decoding was introduced.

11 years agoRename CACHE_LINE_SIZE to PG_CACHE_LINE_SIZE.
Andres Freund [Wed, 1 Oct 2014 09:54:05 +0000 (11:54 +0200)]
Rename CACHE_LINE_SIZE to PG_CACHE_LINE_SIZE.

As noted in http://bugs.debian.org/763098 there is a conflict between
postgres' definition of CACHE_LINE_SIZE and the definition by various
*bsd platforms. It's debatable who has the right to define such a
name, but postgres' use was only introduced in 375d8526f290 (9.4), so
it seems like a good idea to rename it.

Discussion: 20140930195756.GC27407@msg.df7cb.de

Per complaint of Christoph Berg in the above email, although he's not
the original bug reporter.

Backpatch to 9.4 where the define was introduced.

11 years agoCorrect stdin/stdout usage in COPY .. PROGRAM
Stephen Frost [Tue, 30 Sep 2014 19:55:28 +0000 (15:55 -0400)]
Correct stdin/stdout usage in COPY .. PROGRAM

The COPY documentation incorrectly stated, for the PROGRAM case,
that we read from stdin and wrote to stdout.  Fix that, and improve
consistency by referring to the 'PostgreSQL' user instead of the
'postgres' user, as is done in the rest of the COPY documentation.

Pointed out by Peter van Dijk.

Back-patch to 9.3 where COPY .. PROGRAM was introduced.

11 years agoFix pg_dump's --if-exists for large objects
Alvaro Herrera [Tue, 30 Sep 2014 15:06:37 +0000 (12:06 -0300)]
Fix pg_dump's --if-exists for large objects

This was born broken in 9067310cc5dd590e36c2c3219dbf3961d7c9f8cb.

Per trouble report from Joachim Wieland.

Pavel StΔ›hule and Γlvaro Herrera

11 years agopg_upgrade: have pg_upgrade fail for old 9.4 JSONB format
Bruce Momjian [Tue, 30 Sep 2014 00:19:59 +0000 (20:19 -0400)]
pg_upgrade:  have pg_upgrade fail for old 9.4 JSONB format

Backpatch through 9.4

11 years agodoc fix for pg_recvlogical: --create doesn't immediately exit.
Andres Freund [Mon, 29 Sep 2014 23:49:25 +0000 (01:49 +0200)]
doc fix for pg_recvlogical: --create doesn't immediately exit.

Author: Michael Paquier

11 years agoAlso revert e3ec0728, JSON regression tests
Stephen Frost [Mon, 29 Sep 2014 17:59:32 +0000 (13:59 -0400)]
Also revert e3ec0728, JSON regression tests

Managed to forget to update the other JSON regression test output,
again.  Revert the commit which fixed it before.

Per buildfarm.

11 years agoRevert 95d737ff to add 'ignore_nulls'
Stephen Frost [Mon, 29 Sep 2014 17:32:22 +0000 (13:32 -0400)]
Revert 95d737ff to add 'ignore_nulls'

Per discussion, revert the commit which added 'ignore_nulls' to
row_to_json.  This capability would be better added as an independent
function rather than being bolted on to row_to_json.  Additionally,
the implementation didn't address complex JSON objects, and so was
incomplete anyway.

Pointed out by Tom and discussed with Andrew and Robert.

11 years agoChange JSONB's on-disk format for improved performance.
Tom Lane [Mon, 29 Sep 2014 16:29:21 +0000 (12:29 -0400)]
Change JSONB's on-disk format for improved performance.

The original design used an array of offsets into the variable-length
portion of a JSONB container.  However, such an array is basically
uncompressible by simple compression techniques such as TOAST's LZ
compressor.  That's bad enough, but because the offset array is at the
front, it tended to trigger the give-up-after-1KB heuristic in the TOAST
code, so that the entire JSONB object was stored uncompressed; which was
the root cause of bug #11109 from Larry White.

To fix without losing the ability to extract a random array element in O(1)
time, change this scheme so that most of the JEntry array elements hold
lengths rather than offsets.  With data that's compressible at all, there
tend to be fewer distinct element lengths, so that there is scope for
compression of the JEntry array.  Every N'th entry is still an offset.
To determine the length or offset of any specific element, we might have
to examine up to N preceding JEntrys, but that's still O(1) so far as the
total container size is concerned.  Testing shows that this cost is
negligible compared to other costs of accessing a JSONB field, and that
the method does largely fix the incompressible-data problem.

While at it, rearrange the order of elements in a JSONB object so that
it's "all the keys, then all the values" not alternating keys and values.
This doesn't really make much difference right at the moment, but it will
allow providing a fast path for extracting individual object fields from
large JSONB values stored EXTERNAL (ie, uncompressed), analogously to the
existing optimization for substring extraction from large EXTERNAL text
values.

Bump catversion to denote the incompatibility in on-disk format.
We will need to fix pg_upgrade to disallow upgrading jsonb data stored
with 9.4 betas 1 and 2.

Heikki Linnakangas and Tom Lane

11 years agoFix relcache for policies, and doc updates
Stephen Frost [Fri, 26 Sep 2014 16:46:26 +0000 (12:46 -0400)]
Fix relcache for policies, and doc updates

Andres pointed out that there was an extra ';' in equalPolicies, which
made me realize that my prior testing with CLOBBER_CACHE_ALWAYS was
insufficient (it didn't always catch the issue, just most of the time).
Thanks to that, a different issue was discovered, specifically in
equalRSDescs.  This change corrects eqaulRSDescs to return 'true' once
all policies have been confirmed logically identical.  After stepping
through both functions to ensure correct behavior, I ran this for
about 12 hours of CLOBBER_CACHE_ALWAYS runs of the regression tests
with no failures.

In addition, correct a few typos in the documentation which were pointed
out by Thom Brown (thanks!) and improve the policy documentation further
by adding a flushed out usage example based on a unix passwd file.

Lastly, clean up a few comments in the regression tests and pg_dump.h.

11 years agoFix identify_locking_dependencies for schema-only dumps.
Robert Haas [Fri, 26 Sep 2014 15:21:35 +0000 (11:21 -0400)]
Fix identify_locking_dependencies for schema-only dumps.

Without this fix, parallel restore of a schema-only dump can deadlock,
because when the dump is schema-only, the dependency will still be
pointing at the TABLE item rather than the TABLE DATA item.

Robert Haas and Tom Lane

11 years agoFurther atomic ops portability improvements and bug fixes.
Andres Freund [Fri, 26 Sep 2014 13:55:44 +0000 (15:55 +0200)]
Further atomic ops portability improvements and bug fixes.

* Don't play tricks for a more efficient pg_atomic_clear_flag() in the
  generic gcc implementation. The old version was broken on gcc < 4.7
  on !x86 platforms. Per buildfarm member chipmunk.
* Make usage of __atomic() fences depend on HAVE_GCC__ATOMIC_INT32_CAS
  instead of HAVE_GCC__ATOMIC_INT64_CAS - there's platforms with 32bit
  support that don't support 64bit atomics.
* Blindly fix two superflous #endif in generic-xlc.h
* Check for --disable-atomics in platforms but x86.

11 years agoFix a couple occurrences of 'the the' in the new atomics API.
Andres Freund [Fri, 26 Sep 2014 07:37:20 +0000 (09:37 +0200)]
Fix a couple occurrences of 'the the' in the new atomics API.

Author: Erik Rijkers