Modify snapshot definition so that lazy vacuums are ignored by other
vacuums. This allows a OLTP-like system with big tables to continue
regular vacuuming on small-but-frequently-updated tables while the
big tables are being vacuumed.
Original patch from Hannu Krossing, rewritten by Tom Lane and updated
by me.
Bruce Momjian [Sun, 30 Jul 2006 01:45:21 +0000 (01:45 +0000)]
Fix WIN32 wait() return value macros to be accurate, particularly
because they are used for testing the return value from system().
(WIN32 doesn't overlay the return code with other failure conditions
like Unix does, so they are just simple macros.)
Fix regression checks to properly handle diff failures on Win32 using
the new macros.
Andrew Dunstan [Sat, 29 Jul 2006 19:55:18 +0000 (19:55 +0000)]
prevent multiplexing Windows kernel event objects we listen for across various sockets - should fix the occasional stats test regression failures we see.
Tom Lane [Sat, 29 Jul 2006 03:02:56 +0000 (03:02 +0000)]
Adjust initialization sequence for timezone_abbreviations so that
it's handled just about like timezone; in particular, don't try
to read anything during InitializeGUCOptions. Should solve current
startup failure on Windows, and avoid wasted cycles if a nondefault
setting is specified in postgresql.conf too. Possibly we need to
think about a more general solution for handling 'expensive to set'
GUC options.
Change the delta val from 0 and 10000 to -5000 and 5000 per recent
discussion in hackers list. Also enhance predefined benchmark
scenarios to reflect the scaling factor parameter flexibly.
Tom Lane [Fri, 28 Jul 2006 18:33:04 +0000 (18:33 +0000)]
SQL2003-standard statistical aggregates, by Sergey Koposov. I've added only
the float8 versions of the aggregates, which is all that the standard requires.
Sergey's original patch also provided versions using numeric arithmetic,
but given the size and slowness of the code, I doubt we ought to include
those in core.
Tom Lane [Thu, 27 Jul 2006 19:52:07 +0000 (19:52 +0000)]
Aggregate functions now support multiple input arguments. I also took
the opportunity to treat COUNT(*) as a zero-argument aggregate instead
of the old hack that equated it to COUNT(1); this is materially cleaner
(no more weird ANYOID cases) and ought to be at least a tiny bit faster.
Original patch by Sergey Koposov; review, documentation, simple regression
tests, pg_dump and psql support by moi.
Tom Lane [Thu, 27 Jul 2006 15:37:19 +0000 (15:37 +0000)]
Original coding of pg_regress.c made the results and log directories
with restrictive permissions, which was not the behavior of the shell
script and doesn't seem very desirable. Use the umask setting instead.
Tom Lane [Wed, 26 Jul 2006 19:31:51 +0000 (19:31 +0000)]
Code review for bigint-LIMIT patch. Fix missed planner dependency,
eliminate unnecessary code, force initdb because stored rules change
(limit nodes are now supposed to be int8 not int4 expressions).
Update comments and error messages, which still all said 'integer'.
Bruce Momjian [Wed, 26 Jul 2006 17:23:02 +0000 (17:23 +0000)]
Reorder items:
< o Allow point-in-time recovery to archive partially filled
< write-ahead logs? [pitr]
> o Add command to archive partially filled write-ahead logs? [pitr]
< of a disk failure. This could be triggered by a user command or
< a timer.
> of a disk failure.
< recovery. A function call to do this would also be useful.
> recovery.
> o Add reporting of the current WAL file and offset, perhaps as
> part of partial log file archiving
>
> The offset allows parts of a WAL file to be archived using
> an external program.
>
< o Add reporting of the current WAL file and offset, perhaps as
< part of partial log file archiving
<
< The offset allows parts of a WAL file to be archived using
< an external program.
Peter Eisentraut [Wed, 26 Jul 2006 11:39:47 +0000 (11:39 +0000)]
When a GUC string variable is not set, print the empty string (in SHOW etc.),
not "unset". An "unset" state doesn't really exist; all variables behave
like an empty string value if the string being pointed to has not been
initialized.
Bruce Momjian [Tue, 25 Jul 2006 23:23:45 +0000 (23:23 +0000)]
/contrib/cube improvements:
Update the calling convention for all external facing functions. By
external facing, I mean all functions that are directly referenced in
cube.sql. Prior to my update, all functions used the older V0 calling
convention. They now use V1.
New Functions:
cube(float[]), which makes a zero volume cube from a float array
cube(float[], float[]), which allows the user to create a cube from
two float arrays; one for the upper right and one for the lower left
coordinate.
cube_subset(cube, int4[]), to allow you to reorder or choose a subset of
dimensions from a cube, using index values specified in the array.
Tom Lane [Tue, 25 Jul 2006 19:13:00 +0000 (19:13 +0000)]
Modify btree to delete known-dead index entries without an actual VACUUM.
When we are about to split an index page to do an insertion, first look
to see if any entries marked LP_DELETE exist on the page, and if so remove
them to try to make enough space for the desired insert. This should reduce
index bloat in heavily-updated tables, although of course you still need
VACUUM eventually to clean up the heap.
Bruce Momjian [Tue, 25 Jul 2006 15:27:24 +0000 (15:27 +0000)]
Add offset mention:
< o Add reporting of the current WAL file, perhaps as part of
< partial log file archiving
> o Add reporting of the current WAL file and offset, perhaps as
> part of partial log file archiving
Tom Lane [Tue, 25 Jul 2006 03:51:23 +0000 (03:51 +0000)]
Remove hard-wired lists of timezone abbreviations in favor of providing
configuration files that can be altered by a DBA. The australian_timezones
GUC setting disappears, replaced by a timezone_abbreviations setting (set this
to 'Australia' to get the effect of australian_timezones). The list of zone
names defined by default has undergone a bit of cleanup, too. Documentation
still needs some work --- in particular, should we fix Table B-4, or just get
rid of it? Joachim Wieland, with some editorializing by moi.
Tom Lane [Mon, 24 Jul 2006 01:19:48 +0000 (01:19 +0000)]
Add a fudge factor to genericcostestimate() to prevent the planner from
thinking that indexes of different sizes are equally attractive. Per
gripe from Jim Nasby. (I remain unconvinced that there's such a problem
in existing releases, but CVS HEAD definitely has got a problem because
of its new count-only-leaf-pages approach to indexscan costing.)
Tom Lane [Sun, 23 Jul 2006 23:08:46 +0000 (23:08 +0000)]
Convert the lock manager to use the new dynahash.c support for partitioned
hash tables, instead of the previous kluge involving multiple hash tables.
This partially undoes my patch of last December.
Tom Lane [Sun, 23 Jul 2006 18:34:45 +0000 (18:34 +0000)]
Fix oversight in sizing of shared buffer lookup hashtable. Because
BufferAlloc tries to insert a new mapping entry before deleting the old one
for a buffer, we have a transient need for more than NBuffers entries ---
one more in 8.1, and as many as NUM_BUFFER_PARTITIONS more in CVS HEAD.
In theory this could lead to an "out of shared memory" failure if shmem
had already been completely claimed by the time the extra entries were
needed.
Tom Lane [Sun, 23 Jul 2006 03:07:58 +0000 (03:07 +0000)]
Split the buffer mapping table into multiple separately lockable
partitions, as per discussion. Passes functionality checks, but
I don't have any performance data yet.
Tom Lane [Sat, 22 Jul 2006 23:04:39 +0000 (23:04 +0000)]
Add support to dynahash.c for partitioning shared hashtables according
to the low-order bits of the entry hash value. Also make some incidental
cleanups in the dynahash API, such as not exporting the hash header
structs to the world.
Tom Lane [Sat, 22 Jul 2006 21:04:40 +0000 (21:04 +0000)]
Hmm, seems --disable-spinlocks has been broken for awhile and nobody
noticed. Fix SpinlockSemas() to report the correct count considering
that PG 8.1 adds a spinlock to each shared-buffer header.
Tom Lane [Sat, 22 Jul 2006 15:41:56 +0000 (15:41 +0000)]
In the recent changes to make the planner account better for cache
effects in a nestloop inner indexscan, I had only dealt with plain index
scans and the index portion of bitmap scans. But there will be cache
benefits for the heap accesses of bitmap scans too, so fix
cost_bitmap_heap_scan() to account for that.
Peter Eisentraut [Fri, 21 Jul 2006 22:37:37 +0000 (22:37 +0000)]
For automatic dependency tracking, replace our sed hackery with the GCC-
-built-in mechanism through the -MP flag. Adjust the file extensions to
look more like Automake practice. This frees up the .d suffix for use by
DTrace.
Tom Lane [Fri, 21 Jul 2006 20:51:33 +0000 (20:51 +0000)]
Add the full set of comparison functions for type TID, including a btree
opclass. This is not so much because anyone's likely to create an index
on TID, as that sorting TIDs can be useful. Also added max and min
aggregates while at it, so that one can investigate the clusteredness of
a table with queries like SELECT min(ctid), max(ctid) FROM tab WHERE ...
Greg Stark and Tom Lane
Tom Lane [Fri, 21 Jul 2006 00:24:04 +0000 (00:24 +0000)]
Ah, I finally realize why Magnus wanted to add a --bindir option to
pg_regress: there's no other way to cope with testing a relocated
installation. Seems better to call it --psqldir though, since the
only thing we need to find in that case is psql. It'd be better if
we could use find_other_exec, but that's not happening unless we are
willing to install pg_regress alongside psql, which seems unlikely
to happen.
Tom Lane [Thu, 20 Jul 2006 16:25:30 +0000 (16:25 +0000)]
As a stopgap to get the Windows buildfarm members running again, hot-wire
the check on diff's exit status to check for literally 0 or 1. Someone
should look into why WIFEXITED/WEXITSTATUS don't work for this, but I've
spent more than enough time on it already.
Tom Lane [Thu, 20 Jul 2006 02:10:00 +0000 (02:10 +0000)]
Fix pg_regress.c to report tests in a parallel group when they finish,
not when they're started. This mimics a subtle point of the behavior
of the old shell script, and gives better feedback when watching the
tests.
Tom Lane [Thu, 20 Jul 2006 01:16:57 +0000 (01:16 +0000)]
Make pg_regress.c get paths from pg_config_paths.h, instead of -D
switches passed from the Makefile. This looks like it will fix
problem with virtual vs real paths under msys.
Tom Lane [Thu, 20 Jul 2006 00:46:42 +0000 (00:46 +0000)]
Don't try to truncate multixact SLRU files in checkpoints done during xlog
recovery. In the first place, it doesn't work because slru's
latest_page_number isn't set up yet (this is why we've been hearing reports
of strange "apparent wraparound" log messages during crash recovery, but
only from people who'd managed to advance their next-mxact counters some
considerable distance from 0). In the second place, it seems a bit unwise
to be throwing away data during crash recovery anwyway. This latter
consideration convinces me to just disable truncation during recovery,
rather than computing latest_page_number and pushing ahead.
Tom Lane [Wed, 19 Jul 2006 17:02:59 +0000 (17:02 +0000)]
Adjust spawn_process() to avoid unnecessary overhead processes: we can
just exec instead of creating a subprocess. This reduces process usage
from four processes per parallel test to two. I have no idea whether
a comparable optimization is possible or useful in the Windows port.
Tom Lane [Wed, 19 Jul 2006 16:23:17 +0000 (16:23 +0000)]
Adjust pg_regress to print out the exact string given to system() when
'make install' or 'initdb' fails. Also minor simplification of fgets()
usage --- fgets guarantees a trailing null anyway.
Tom Lane [Wed, 19 Jul 2006 02:37:00 +0000 (02:37 +0000)]
Rewrite pg_regress as a C program instead of a shell script.
This allows it to be used on Windows without installing mingw
(though you do still need 'diff'), and opens the door to future
improvements such as message localization.
Magnus Hagander and Tom Lane.
Bruce Momjian [Tue, 18 Jul 2006 22:18:08 +0000 (22:18 +0000)]
The Win32 DEF files that are generated for libpq contain the attribute
"DESCRIPTION", which is actually only allowed for device drivers. The
compilers ignore it with a warning - if we remove them, we get rid of
the warning.
Tom Lane [Tue, 18 Jul 2006 00:32:42 +0000 (00:32 +0000)]
Make pg_regress a tad simpler and more general-purpose by removing its
code to forcibly drop regressuser[1-4] and regressgroup[1-2]. Instead,
let the privileges.sql test do that for itself (this is made easy by
the recent addition of DROP ROLE IF EXISTS). Per a recent patch proposed
by Joachim Wieland --- the rest of his patch is superseded by the
rewrite into C, but this is a good idea we should adopt.
Neil Conway [Mon, 17 Jul 2006 00:21:23 +0000 (00:21 +0000)]
Improve psql's \df slash command to include the argument names and modes
(OUT or INOUT) of the function. Patch from David Fetter, editorialization
by Neil Conway.
Neil Conway [Sun, 16 Jul 2006 23:59:58 +0000 (23:59 +0000)]
Minor documentation tweak: in the tables of functions and operators,
don't include a space between the function name and the parenthesis
that begins its parameter list, for consistency.
Tom Lane [Sun, 16 Jul 2006 20:17:04 +0000 (20:17 +0000)]
In a Windows backend, don't build src/port/pgsleep.c's version of
pg_usleep at all. Instead call the replacement function in
port/win32/signal.c by that name. Avoids tricky macro-redefinition
logic and suppresses a compiler warning; furthermore it ensures that
no one can accidentally use the non-signal-aware version of pg_usleep
in a Windows backend.
Tom Lane [Sun, 16 Jul 2006 18:17:14 +0000 (18:17 +0000)]
Ensure that we retry rather than erroring out when send() or recv() return
EINTR; the stats code was failing to do this and so were a couple of places
in the postmaster. The stats code assumed that recv() could not return EINTR
if a preceding select() showed the socket to be read-ready, but this is
demonstrably false with our Windows implementation of recv(), and it may
not be the case on all Unix variants either. I think this explains the
intermittent stats regression test failures we've been seeing, as well
as reports of stats collector instability under high load on Windows.
Tom Lane [Sun, 16 Jul 2006 01:35:28 +0000 (01:35 +0000)]
Fix lack of repeat-inclusion guard in win32 substitute sys/socket.h.
I think this explains the 'implicit declaration of function gai_strerror'
warnings visible in the current buildfarm report from snake: if
sys/socket.h is included again after getaddrinfo.h, the file would
merrily undefine the gai_strerror macro.
Tom Lane [Sun, 16 Jul 2006 00:54:22 +0000 (00:54 +0000)]
Fix getDatumCopy(): don't use store_att_byval to copy into a Datum
variable (this accounts for regression failures on PPC64, and in fact
won't work on any big-endian machine). Get rid of hardwired knowledge
about datum size rules; make it look just like datumCopy().
Tom Lane [Sat, 15 Jul 2006 15:47:17 +0000 (15:47 +0000)]
Put back some more not-so-unused-as-all-that #includes. This un-breaks
the EXEC_BACKEND code on my machines, so hopefully it will fix the
Windows buildfarm members.