Tom Lane [Mon, 22 Aug 2005 23:59:04 +0000 (23:59 +0000)]
Rewrite gather-write patch into something less obviously bolted on
after the fact. Fix bug with incorrect test for whether we are at end
of logfile segment. Arrange for writes triggered by XLogInsert's
is-cache-more-than-half-full test to synchronize with the cache boundaries,
so that in long transactions we tend to write alternating halves of the
cache rather than randomly chosen portions of it; this saves one more
write syscall per cache load.
Tom Lane [Mon, 22 Aug 2005 19:40:37 +0000 (19:40 +0000)]
Cause ALTER INDEX OWNER to generate a warning and do nothing, rather than
erroring out as it has done for the last couple weeks. Document that this
form is now ignored because indexes can't usefully have different owners
from their parent tables. Fix pg_dump to not generate ALTER OWNER commands
for indexes.
Tom Lane [Mon, 22 Aug 2005 17:38:20 +0000 (17:38 +0000)]
Fix unwanted denial of ALTER OWNER rights to superusers. There was some
discussion of getting around this by relaxing the checks made for regular
users, but I'm disinclined to toy with the security model right now,
so just special-case it for superusers where needed.
Bruce Momjian [Mon, 22 Aug 2005 16:59:47 +0000 (16:59 +0000)]
Improve xid wraparound message (the server isn't really shut down, just
not accepting queries).
errmsg("database is not accepting queries to avoid
wraparound data loss in database \"%s\"",
errhint("Stop the postmaster and use a standalone
backend to VACUUM database \"%s\".",
Tom Lane [Mon, 22 Aug 2005 16:27:36 +0000 (16:27 +0000)]
Use an initdb-time test to see if the local version of getaddrinfo()
chokes on IPv6 addresses, and comment out the IPv6 entry in the default
pg_hba.conf if so. Per Andrew Dunstan.
Tom Lane [Mon, 22 Aug 2005 00:41:28 +0000 (00:41 +0000)]
Fix some inconsistent choices of datatypes in xlog.c. Make buffer
indexes all be int, rather than variously int, uint16 and uint32;
add some casts where necessary to support large buffer arrays.
Tom Lane [Sun, 21 Aug 2005 03:39:37 +0000 (03:39 +0000)]
Minor GUC cleanups: document krb_server_hostname and custom_variable_classes
in postgresql.conf.sample, mark custom_variable_classes as SIGHUP not
POSTMASTER to agree with the documentation (I can't see a reason it has
to be POSTMASTER so I think the docs are right).
Tom Lane [Sat, 20 Aug 2005 23:26:37 +0000 (23:26 +0000)]
Convert the arithmetic for shared memory size calculation from 'int'
to 'Size' (that is, size_t), and install overflow detection checks in it.
This allows us to remove the former arbitrary restrictions on NBuffers
etc. It won't make any difference in a 32-bit machine, but in a 64-bit
machine you could theoretically have terabytes of shared buffers.
(How efficiently we could manage 'em remains to be seen.) Similarly,
num_temp_buffers, work_mem, and maintenance_work_mem can be set above
2Gb on a 64-bit machine. Original patch from Koichi Suzuki, additional
work by moi.
Tom Lane [Sat, 20 Aug 2005 19:19:21 +0000 (19:19 +0000)]
Invoke mksafefunc and mkunsafefunc with :: decoration. This seems a good
idea on consistency grounds, whether or not it really fixes bug #1831.
Michael Fuhr
Tom Lane [Sat, 20 Aug 2005 00:40:32 +0000 (00:40 +0000)]
Repair problems with VACUUM destroying t_ctid chains too soon, and with
insufficient paranoia in code that follows t_ctid links. (We must do both
because even with VACUUM doing it properly, the intermediate state with
a dangling t_ctid link is visible concurrently during lazy VACUUM, and
could be seen afterwards if either type of VACUUM crashes partway through.)
Also try to improve documentation about what's going on. Patch is a bit
bulky because passing the XMAX information around required changing the
APIs of some low-level heapam.c routines, but it's not conceptually very
complicated. Per trouble report from Teodor and subsequent analysis.
This needs to be back-patched, but I'll do that after 8.1 beta is out.
Tom Lane [Thu, 18 Aug 2005 17:51:12 +0000 (17:51 +0000)]
Fix up LIMIT/OFFSET planning so that we cope with non-constant LIMIT
or OFFSET clauses by using estimate_expression_value(). The main advantage
of this is that if the expression is a Param and we have a value for the
Param, we'll use that value rather than defaulting. Also, fix some
thinkos in the logic for combining LIMIT/OFFSET with an externally
supplied tuple fraction (this covers cases like EXISTS(...LIMIT...)).
And make sure the results of all this are shown by EXPLAIN. Per a
gripe from Merlin Moncure.
Bruce Momjian [Thu, 18 Aug 2005 04:37:08 +0000 (04:37 +0000)]
Fix to_char(interval) to return proper year and century values.
Fix to_char(interval) to return large year/month/day/hour values that
are larger than possible timestamp values.
Prevent to_char(interval) format specifications that make no sense, like
Month.
Clean up formatting.c code to more logically handle return lengths.
Tom Lane [Wed, 17 Aug 2005 22:14:34 +0000 (22:14 +0000)]
Avoid an Assert failure if OuterUserId hasn't been set yet during
AbortTransaction. This can happen if a backend's InitPostgres transaction
fails (eg, because the given username is invalid). Per Alvaro.
Tom Lane [Tue, 16 Aug 2005 00:48:12 +0000 (00:48 +0000)]
Reject operator names >= NAMEDATALEN characters. These will not work
anyway, and in assert-enabled builds you are likely to get an assertion
failure. Backpatch as far as 7.3; 7.2 seems not to have the problem.
Tom Lane [Mon, 15 Aug 2005 21:50:15 +0000 (21:50 +0000)]
Clean up recent patch for PL handler functions in pg_catalog: the patch
caused PL languages and handlers to be dumped ALWAYS, even in the face
of contrary --schema or --table switches. Adopt a slightly saner
definition.
Tom Lane [Mon, 15 Aug 2005 19:40:20 +0000 (19:40 +0000)]
array_in() and array_recv() need to be more paranoid about validating
their OID parameter. It was possible to crash the backend with
select array_in('{123}',0,0); because that would bypass the needed step
of initializing the workspace. These seem to be the only two places
with a problem, though (record_in and record_recv don't have the issue,
and the other array functions aren't depending on user-supplied input).
Back-patch as far as 7.4; 7.3 does not have the bug.
Tom Lane [Mon, 15 Aug 2005 19:05:16 +0000 (19:05 +0000)]
int_array_enum function should be using fcinfo->flinfo->fn_extra for
working state, not fcinfo->context. Silly oversight on my part in last
go-round of fixes.
Tom Lane [Mon, 15 Aug 2005 16:25:19 +0000 (16:25 +0000)]
Allow the pgstat views to show toast tables as well as regular tables
(the stats system has always collected this info, but the views were
filtering it out). Modify autovacuum so that over-threshold activity
in a toast table can trigger a VACUUM of the parent table, even if the
parent didn't appear to need vacuuming itself. Per discussion a month
or so back about "short, wide tables".
Tom Lane [Sun, 14 Aug 2005 18:49:30 +0000 (18:49 +0000)]
Fix up tab completion for ROLEs and add some more completion logic for
other stuff; change \du and \dg to be role-aware (Stefan Kaltenbrunner).
Also make tab completion fetch the list of GUC variables from pg_settings
instead of having a hard-wired copy of the list (Tom Lane).
Tom Lane [Sat, 13 Aug 2005 22:18:07 +0000 (22:18 +0000)]
Tweak catalog cache management algorithms to reduce cost of
SearchCatCacheList and ReleaseCatCacheList. Previously, we incremented
and decremented the refcounts of list member tuples along with the list
itself, but that's unnecessary, and very expensive when the list is big.
It's cheaper to change only the list refcount. When we are considering
deleting a cache entry, we have to check not only its own refcount but
its parent list's ... but it's easy to arrange the code so that this
check is not made in any commonly-used paths, so the cost is really nil.
The bigger gain though is to refrain from DLMoveToFront'ing each individual
member tuple each time the list is referenced. To keep some semblance
of fair space management, lists are just marked as used or not since the
last cache cleanout search, and we do a MoveToFront pass only when about
to run a cleanout. In combination, these changes reduce the costs of
SearchCatCacheList and ReleaseCatCacheList from about 4.5% of pgbench
runtime to under 1%, according to my gprof results.
Tom Lane [Sat, 13 Aug 2005 19:02:34 +0000 (19:02 +0000)]
Make pg_stat_file() use OUT parameters so that the user doesn't have to
remember the output parameter set for himself. It's a bit of a kluge
but fixing array_in to work in bootstrap mode looks worse.
I removed the separate pg_file_length() function, as it no longer has any
real notational advantage --- you can write (pg_stat_file(...)).length.
Bruce Momjian [Sat, 13 Aug 2005 02:06:21 +0000 (02:06 +0000)]
The large one adds support for RSA keys and reorganizes
the pubkey functions a bit. The actual RSA-specific code
there is tiny, most of the patch consists of reorg of the
pubkey code, as lots of it was written as elgamal-only.
I was bit hasty making the random exponent 'k' a prime. Further researh
shows that Elgamal encryption has no specific needs in respect to k,
any random number is fine.
It is bit different for signing, there it needs to be 'relatively prime'
to p - 1, that means GCD(k, p-1) == 1, which is also a lot lighter than
full primality. As we don't do signing, this can be ignored.
o pgp_mpi_free: Accept NULLs
o pgp_mpi_cksum: result should be 16bit
o Remove function name from error messages - to be similar to other
SQL functions, and it does not match anyway the called function
o remove couple junk lines
o Tom stuck a CVS id into file. I doubt the usefulness of it,
but if it needs to be in the file then rather at the end.
Also tag it as comment for asciidoc.
o Mention bytea vs. text difference
o Couple clarifications
There is a choice whether to update it with pgp functions or
remove it. I decided to remove it, updating is pointless.
I've tried to keep the core of pgcrypto relatively independent
from main PostgreSQL, to make it easy to use externally if needed,
and that is good. Eg. that made development of PGP functions much
nicer.
But I have no plans to release it as generic library, so keeping such
doc
up-to-date is waste of time. If anyone is interested in using it in
other products, he can probably bother to read the source too.
Commented source is another thing - I'll try to make another pass
over code to see if there is anything non-obvious that would need
more comments.
Bruce Momjian [Sat, 13 Aug 2005 01:55:41 +0000 (01:55 +0000)]
Add documentation:
>>>I think a more accurate description would be "permissions not
>>>inherited by children," and that isn't necessarily a bug.
>>
>>I agree it may not be a bug - but it's more than the permissions not
>>being inherited: the parent is affected.
>
>
> Not really, once you understand what's happening. Unless you use
> FROM ONLY, selecting from the parent selects from the parent *and*
> its children. The parent itself isn't affected, as queries with
> FROM ONLY should demonstrate. I understand what you're saying --
> that there's an apparent effect on the parent -- but there really
> isn't.
Tom Lane [Fri, 12 Aug 2005 21:49:47 +0000 (21:49 +0000)]
Pass the type OID as the typioparam for all non-array types, rather than
only composite types as we did in 8.0. Per discussion with Martijn
van Oosterhout.
Bruce Momjian [Fri, 12 Aug 2005 21:36:59 +0000 (21:36 +0000)]
This patch fixes the event type used to log output from the
stderr-in-service or output-from-syslogger-in-service code. Previously
everything was flagged as ERRORs there, which caused all instances to
log "LOG: logger shutting down" as error...
Please apply for 8.1. I'd also like it considered for 8.0 since logging
non-errors as errors can be cause for alarm amongst people who actually
look at their logs...
Bruce Momjian [Fri, 12 Aug 2005 21:23:10 +0000 (21:23 +0000)]
[ backpatched to 8.0.X.]
> >> 3) I restarted the postmaster both times. I got this error
> both times.
> >> :25: ERROR: could not load library "C:/Program
> >> Files/PostgreSQL/8.0/lib/testtrigfuncs.dll": dynamic load error
>
> > Yes. We really need to look at fixing that error message. I had
> > forgotten it completely :-(
>
> > Bruce, you think we can sneak that in after feature freeze? I would
> > call it a bugfix :-)
>
> Me too. That's been on the radar for awhile --- please do
> send in a patch.
Here we go, that wasn't too hard :-)
Apart from adding the error handling, it does one more thing: it changes
the errormode when loading the DLLs. Previously if a DLL was broken, or
referenced other DLLs that couldn't be found, a popup dialog box would
appear on the screen. Which had to be clicked before the backend could
continue. This patch also disables the popup error message for DLL
loads.
I think this is something we should consider doing for the entire
backend - disable those popups, and say we deal with it ourselves. What
do you other win32 hackers thinnk about this?
In the meantime, this patch fixes the error msgs. Please apply for 8.1
and please consider a backpatch to 8.0.
Bruce Momjian [Fri, 12 Aug 2005 21:20:24 +0000 (21:20 +0000)]
> Gavin Sherry <swm@linuxworld.com.au> writes:
> > I ran across this yesterday on HEAD:
>
> > template1=# grant select on foo, foo to swm;
> > ERROR: tuple already updated by self
>
> Seems to fail similarly in every version back to 7.2; probably further,
> but that's all I have running at the moment.
>
> > We could do away with the error by producing a unique list of object names
> > -- but that would impose an extra cost on the common case.
>
> CommandCounterIncrement in the GRANT loop would be easier, likely.
> I'm having a hard time getting excited about it though...
Yeah, its not that exciting but that error message would throw your
average user.
I've attached a patch which calls CommandCounterIncrement() in each of the
grant loops.
Tom Lane [Fri, 12 Aug 2005 21:07:53 +0000 (21:07 +0000)]
Fix up canonicalize_path to do the right thing in all cases (I think ...
this was harder than it seemed at first glance). Also push code for
checking for ".." in file names into path.c where it belongs.
Bruce Momjian [Fri, 12 Aug 2005 20:48:03 +0000 (20:48 +0000)]
> The attached patch moves a plperl sanity check into the correct
> position. Performing the check in the existing position allows the call
> to go through to perl first, possibly resulting in a SEGV.
Tom Lane [Fri, 12 Aug 2005 18:23:56 +0000 (18:23 +0000)]
Code & docs review for server instrumentation patch. File timestamps
should surely be timestamptz not timestamp; fix some but not all of the
holes in check_and_make_absolute(); other minor cleanup. Also put in
the missed catversion bump.
Tom Lane [Fri, 12 Aug 2005 14:34:14 +0000 (14:34 +0000)]
Change a couple of "can't happen" error messages to be a shade more
verbose when they do happen. The "left link changed unexpectedly"
one in particular has been seen more than once in the field.
Tom Lane [Fri, 12 Aug 2005 05:05:51 +0000 (05:05 +0000)]
Remove BufferBlockPointers array in favor of a base + (bufnum) * BLCKSZ
computation. On modern machines this is as fast if not faster, and we
don't have to clog the CPU's L2 cache with a tens-of-KB pointer array.
If we ever decide to adopt a more dynamic allocation method for shared
buffers, we'll probably have to revert this patch, but in the meantime
we might as well save a few bytes and nanoseconds. Per Qingqing Zhou.
Tom Lane [Fri, 12 Aug 2005 01:36:05 +0000 (01:36 +0000)]
Solve the problem of OID collisions by probing for duplicate OIDs
whenever we generate a new OID. This prevents occasional duplicate-OID
errors that can otherwise occur once the OID counter has wrapped around.
Duplicate relfilenode values are also checked for when creating new
physical files. Per my recent proposal.
Tom Lane [Thu, 11 Aug 2005 22:53:41 +0000 (22:53 +0000)]
EINTR return from connect() should be treated exactly the same as
EINPROGRESS, according to Florian Hars. I'm not completely convinced
but the spec does seem to read that way.
Tom Lane [Thu, 11 Aug 2005 21:11:50 +0000 (21:11 +0000)]
Autovacuum loose end mop-up. Provide autovacuum-specific vacuum cost
delay and limit, both as global GUCs and as table-specific entries in
pg_autovacuum. stats_reset_on_server_start is now OFF by default,
but a reset is forced if we did WAL replay. XID-wrap vacuums do not
ANALYZE, but do FREEZE if it's a template database. Alvaro Herrera