Bruce Momjian [Tue, 21 Jul 1998 04:17:30 +0000 (04:17 +0000)]
Theses buffer leaks are caused by indexes that are kept open between
calls. Outside a transaction, the backend detects them as buffer
leaks; it sends a NOTICE, and frees them. This sometimes cause a
segmentation fault (at least on Linux). These indexes are initialized
on the first lo_read/lo_write/lo_tell call, and (normally) closed
on a lo_close call. Thus the buffer leaks appear when lo direct
access functions are used, and not with lo_import/lo_export functions
(libpq version calls lo_close before ending the command, and the
backend version uses another path).
The included patches (against recent snapshot, and against 6.3.2)
cause indexes to be closed on transaction end (that is on explicit
'END' statment, or on command termination outside trasaction blocks),
thus preventing the buffer leaks while increasing performance inside
transactions. Some (all?) 'classic' memory leaks are also removed.
I hope it will be ok.
--- Pascal ANDRE, graduated from Ecole Centrale Paris andre@via.ecp.fr
Bruce Momjian [Sun, 19 Jul 1998 18:26:41 +0000 (18:26 +0000)]
I finally got the time to put together some stuff for fti for
inclusion in pgsql. I have included a README which should be enough
to start using it, plus a BENCH file that describes some timings
I have done.
Please have a look at it, and if you think everything is OK, I
would like it seen included in the contrib-section of pgsql.
I don't think I will do any more work in this, but maybe it inspires
somebody else to improve on it.
Bruce Momjian [Sun, 19 Jul 1998 05:49:26 +0000 (05:49 +0000)]
1) Queries using the having clause on base tables should work well
now. Here some tested features, (examples included in the patch):
1.1) Subselects in the having clause 1.2) Double nested subselects
1.3) Subselects used in the where clause and in the having clause
simultaneously 1.4) Union Selects using having 1.5) Indexes
on the base relations are used correctly 1.6) Unallowed Queries
are prevented (e.g. qualifications in the
having clause that belong to the where clause) 1.7) Insert
into as select
2) Queries using the having clause on view relations also work
but there are some restrictions:
2.1) Create View as Select ... Having ...; using base tables in
the select 2.1.1) The Query rewrite system:
2.1.2) Why are only simple queries allowed against a view from 2.1)
? 2.2) Select ... from testview1, testview2, ... having...; 3) Bug
in ExecMergeJoin ??
Bruce Momjian [Sun, 19 Jul 1998 05:24:51 +0000 (05:24 +0000)]
pg_dump -z has gotten rather thoroughly broken in the last couple
of days --- it was emitting stuff like
REVOKE ALL on 'table' from PUBLIC; GRANT ALL on "table" to
"Public"; neither of which work. While I was at it I
cleaned up a few other things:
* \connect commands are issued only in -z mode. In this way,
reloading a pg_dump script made without -z will generate a simple
database wholly owned by the invoking user, rather than a mishmash
of tables owned by various people but lacking in access rights.
(Analogy: cp versus cp -p.)
* \connect commands are issued just before COPY FROM stdin commands;
without this, reloading a database containing non-world-writable
tables tended to fail because the COPY was not necessarily attempted
as the table owner.
* Redundant \connect commands are suppressed (each one costs a
backend launch, so...).
* Man page updated (-z wasn't ever documented).
The first two items were discussed in a pgsql-hackers thread around
6 May 98 ("An item for the TODO list: pg_dump and multiple table
owners") but no one had bothered to deal with 'em yet.
Bruce Momjian [Sun, 19 Jul 1998 04:30:04 +0000 (04:30 +0000)]
Attached are the three patches that were needed to get PostgreSQL
6.3.2 to compile (and run) on my Sparc Solaris 2.5.1 box. Details
below:
pgsql.sparc.patch-template: Adds -D__sparc__ and -D__sun__,
defintions which gcc does define, but Sun's cc does not. :(
pgsql.sparc.patch-makefile: Adds a define so that 'lorder'
is not used, as it is not found on my machine.
Bruce Momjian [Sun, 19 Jul 1998 04:17:13 +0000 (04:17 +0000)]
My mailer munged the intro text in my last post. Here is the text
in a more readable form. -- I am submitting the following patches
to the June 6, 1998 snapshot of PostgreSQL. These patches implement
a port of PostgreSQL to SCO UnixWare 7, and updates the Univel port
(UnixWare 2.x). The patched files, and the reason
for the patch are:
File Reason for the patch ---------------
---------------------------------------------------------------
src/backend/port/dynloader/unixware.c src/backend/port/dynloader/unixware.h
src/include/port/unixware.h src/makefiles/Makefile.unixware
src/template/unixware
Created for the UNIXWARE port.
src/include/port/univel.h
Modifed this file to work with the changes made to
s_lock.[ch].
src/backend/storage/buffer/s_lock.c src/include/storage/s_lock.h
Moved the UNIXWARE (and Univel) tas() function from
s_lock.c to s_lock.h. The UnixWare compiler asm
construct is treated as a macro and needs to be in
the s_lock.h file. I also reworked the tas()
function to correct some errors in the code.
src/include/version.h.in
The use of the ## operator with quoted strings in
the VERSION macro caused problems with the UnixWare
C compiler. I removed the ## operators since they
were not needed in this case. The macro expands
into a sequence of quoted strings that will be
concatenated by any ANSI C compiler.
src/config.guess
This script was modified to recognize SCO UnixWare
7.
src/configure src/configure.in
The configure script was modified to recognize SCO
UnixWare 7.
Bruce Momjian [Sun, 19 Jul 1998 01:19:54 +0000 (01:19 +0000)]
Somewhere between 6.1 and 6.3 someone removed the support for the
NS32K machine I contributed. In any case, I now have postgresql-6.3
running again on NetBSD/pc532, a NS32532 machine. The following
changes are needed relative to the src directory. (It looks like
support was partially removed when the files were moved from the
src/backend/storage/.... tree to the src/include tree.)
If you need me to get a current development version of postgresql
for this change let me know. Also, let me know if this code needs
updating due to another code movement that deleted the old NS32K
support.
Bruce Momjian [Sat, 18 Jul 1998 14:51:10 +0000 (14:51 +0000)]
On architectures where we don't have any special inline code for
GCC, the inner "#if defined(__GNUC__)" can just be omitted in that
architecture's block.
The existing arrangement with an outer "#if defined(__GNUC__)"
doesn't have any obvious benefit, and it encourages missed cases
like this one.
BTW, I'd suggest making the definition of clear_lock for HPUX be
Bruce Momjian [Sat, 18 Jul 1998 14:38:12 +0000 (14:38 +0000)]
Thank you for testing and reporting this. It is my fault of course,
but as I don't have access to a sparc for testing I just did what
I could. I am guessing here, but please apply the following to your
pgsql and let me know what happens. Also, cd to src/storage/buffer
and do 'make s_lock_test' as well.
Bruce Momjian [Mon, 13 Jul 1998 16:39:07 +0000 (16:39 +0000)]
Currently, building on any platform that hasn't got getrusage()
requires manual editing of src/backend/port/getrusage.c, because
its substitute version of getrusage is #if'd out.
There is no good reason for that, because configure won't even
include the file into the Makefile unless the platform hasn't got
getrusage. Furthermore, we only have one working substitute version
of getrusage --- the alleged HPUX syscall-based code doesn't work.
(It causes a coredump because the syscall returns a struct rusage
that's much larger than the stub struct defined in
src/include/rusagestub.h.) The times()-based emulation works fine
on HPUX, however.
I propose, therefore, that getrusage.c should just unconditionally
compile the times-based version, and rely on configure to include
the file only if needed. This will be one less manual configuration
step on all platforms that need this code.
I see someone missed an ancient bit of shell-scripting lore:
on some older shells, if your script's argument list is empty,
then "$@" generates an empty-string word rather than no word
at all. You need to write ${1+"$@"} to get the latter behavior.
(Read your shell man page to see exactly how that works,
but it does the Right Thing on every Bourne shell.)
In particular, pg_dumpall fails when invoked without any switches
on HPUX 9.*, because pg_dump gets an empty-string argument that it
thinks is the name of the database to dump. I expect this bug
also affects some other OSes, but couldn't tell you just which ones.
Patch attached.
The attached patches respond to discussion that was on pgsql-hackers
around the beginning of June (see thread "libpgtcl bug (and symptomatic
treatment)"). The changes are:
1. Remove code in connectDB that throws away the password after making
a connection. This doesn't really add much security IMHO --- a bad guy
with access to your client's address space can likely extract the
password anyway, to say nothing of what he might do directly. And
there's the serious shortcoming that it prevents PQreset() from working
if the database requires a password.
2. Fix coredump problem: fe_sendauth did not guard against being handed
a NULL password pointer. (This is the proximate cause of the coredump-
during-PQreset problem that Magosanyi Arpad complained of last month.)
I believe the consensus of the discussion last month was in favor of
#1 and #3, but I'm just now getting around to making the change.
I realized that #2 was a bug in process of looking at the change.
Attached are diffs (from current cvs sources) to bring libpq.sgml
and libpq.3 up to date.
It appears that at various times in the past, people have made edits to
one or the other of these files but not both. I propagated some changes
from each into the other, but I don't think I caught every
inconsistency. It'd be real nice if the man pages could be
automatically generated from the SGML...
Making PQrequestCancel safe to call in a signal handler turned out to be
much easier than I feared. So here are the diffs.
Some notes:
* I modified the postmaster's packet "iodone" callback interface to allow
the callback routine to return a continue-or-drop-connection return
code; this was necessary to allow the connection to be closed after
receiving a Cancel, rather than proceeding to launch a new backend...
Being a neatnik, I also made the iodone proc have a typechecked
parameter list.
* I deleted all code I could find that had to do with OOB.
* I made some edits to ensure that all signals mentioned in the code
are referred to symbolically not by numbers ("SIGUSR2" not "2").
I think Bruce may have already done at least some of the same edits;
I hope that merging these patches is not too painful.
Allow floating point constants for "def_arg" numeric arguments.
Used in the generic "CREATE xxx" parsing.
Do some automatic type conversion for inserts from other columns.
Previous trouble with "resjunk" regression test remains for now.
From: "Dr. Michael Meskes" <meskes@online-club.de>
+ Thu Jul 2 20:30:14 CEST 1998
+
+ - Changed new style db name to allow connection types "tcp" and
+ "unix" only
+
+ Tue Jul 7 15:14:14 CEST 1998
+
+ - Fixed some bugs in preproc.y
+ - Set version to 2.3.4
Bruce Momjian [Fri, 3 Jul 1998 04:24:16 +0000 (04:24 +0000)]
Hello!
Through some minor changes, I have been able to compile the libpq
client libraries on the Win32 platform. Since the libpq communications
part has been rewritten, this has become much easier. Enclosed is
a patch that will allow at least Microsoft Visual C++ to compile
libpq into both a static and a dynamic library. I will take a look
at porting the psql frontend as well, but I figured it was a good
idea to send in these patches first - so no major changes are done
to the files before it gets applied (if it does).