Tom Lane [Tue, 26 Oct 2004 16:05:03 +0000 (16:05 +0000)]
Make heap_fetch API more consistent by having the buffer remain pinned
in all cases when keep_buf = true. This allows ANALYZE's inner loop to
use heap_release_fetch, which saves multiple buffer lookups for the same
page and avoids overestimation of cost by the vacuum cost mechanism.
Tom Lane [Mon, 25 Oct 2004 15:42:02 +0000 (15:42 +0000)]
In the new dispensation where REINDEX doesn't take exclusive lock on
the parent table, it's essential that all index accesses take some kind
of lock on the index. I had missed vacuumlazy.c :-( ...
Neil Conway [Mon, 25 Oct 2004 00:46:43 +0000 (00:46 +0000)]
Modify hash_create() to elog(ERROR) if an error occurs, rather than
returning a NULL pointer (some callers remembered to check the return
value, but some did not -- it is safer to just bail out).
Also, cleanup pgstat.c to use elog(ERROR) rather than elog(LOG) followed
by exit().
Tom Lane [Sun, 24 Oct 2004 00:54:12 +0000 (00:54 +0000)]
If we're going to test for switch validity by observing whether the
compiler emits any warnings, the test program had better be 100%
correct, not only 90% correct. The recent addition of -Wold-style-definition
broke thread-safety detection on every platform that has that switch,
because the test program used an old-style definition.
Tom Lane [Fri, 22 Oct 2004 19:48:19 +0000 (19:48 +0000)]
Add a GUC_SUPERUSER_ONLY flag to mark GUC variables that should not be
examinable by non-superusers, and use it to protect the recently-added
GUC variables for data directory and config files. For now I have only
flagged those variables that could be used to deduce something about
the server's filesystem layout, but possibly we should also mark vars
related to logging settings and other admin-only information?
Tom Lane [Fri, 22 Oct 2004 17:20:05 +0000 (17:20 +0000)]
In ALTER COLUMN TYPE, strip any implicit coercion operations appearing
at the top level of the column's old default expression before adding
an implicit coercion to the new column type. This seems to satisfy the
principle of least surprise, as per discussion of bug #1290.
Neil Conway [Fri, 22 Oct 2004 07:21:06 +0000 (07:21 +0000)]
Minor code cleanup: hdefault() only ever returned "true", so it may as
well be declared to return "void" to save callers the trouble of
checking for errors.
Tom Lane [Fri, 22 Oct 2004 00:24:18 +0000 (00:24 +0000)]
Prevent pg_ctl from being run as root. Since it uses configuration files
owned by postgres, doing "pg_ctl start" as root could allow a privilege
escalation attack, as pointed out by iDEFENSE. Of course the postmaster would
fail, but we ought to fail a little sooner to protect sysadmins unfamiliar
with Postgres. The chosen fix is to disable root use of pg_ctl in all cases,
just to be confident there are no other holes.
Tom Lane [Thu, 21 Oct 2004 21:33:59 +0000 (21:33 +0000)]
Disallow referential integrity actions from being deferred; only the
NO ACTION check is deferrable. This seems to be a closer approximation
to what the SQL spec says than what we were doing before, and it prevents
some anomalous behaviors that are possible now that triggers can fire
during the execution of PL functions.
Stephan Szabo.
Tom Lane [Thu, 21 Oct 2004 20:23:19 +0000 (20:23 +0000)]
Set the close-on-exec flag for libpq's socket to the backend, to avoid
any possible problems from child programs executed by the client app.
Per suggestion from Elliot Lee of Red Hat.
Tom Lane [Thu, 21 Oct 2004 19:28:36 +0000 (19:28 +0000)]
Standardize on using the Min, Max, and Abs macros that are in our c.h file,
getting rid of numerous ad-hoc versions that have popped up in various
places. Shortens code and avoids conflict with Windows min() and max()
macros.
Tom Lane [Wed, 20 Oct 2004 16:04:50 +0000 (16:04 +0000)]
Allow functions returning void or cstring to appear in FROM clause,
to make life cushy for the JDBC driver. Centralize the decision-making
that affects this by inventing a get_type_func_class() function, rather
than adding special cases in half a dozen places.
Tom Lane [Mon, 18 Oct 2004 23:23:19 +0000 (23:23 +0000)]
Add some code to ensure that we don't lose communication sync due to
an oversize message, per suggestion from Oliver Jowett. I'm a bit
dubious that this is a real problem, since the client likely doesn't
have any more space available than the server, but it's not hard to
make it behave according to the protocol intention.
Tom Lane [Mon, 18 Oct 2004 22:00:42 +0000 (22:00 +0000)]
Add PQprepare/PQsendPrepared functions to libpq to support preparing
statements without necessarily specifying the datatypes of their parameters.
Abhijit Menon-Sen with some help from Tom Lane.
Bruce Momjian [Mon, 18 Oct 2004 16:13:43 +0000 (16:13 +0000)]
Improve indentation of sublists:
< The proper solution to this will probably the use of a master/slave
< replication solution like Sloney and a connection pooling tool like
< pgpool.
> The proper solution to this will probably the use of a master/slave
> replication solution like Sloney and a connection pooling tool like
> pgpool.
114,116c114,116
< You can use any of the master/slave replication servers to use a
< standby server for data warehousing. To allow read/write queries to
< multiple servers, you need multi-master replication like pgcluster.
> You can use any of the master/slave replication servers to use a
> standby server for data warehousing. To allow read/write queries to
> multiple servers, you need multi-master replication like pgcluster.
166,167c166,167
< Currently large objects entries do not have owners. Permissions can
< only be set at the pg_largeobject table level.
> Currently large objects entries do not have owners. Permissions can
> only be set at the pg_largeobject table level. 173c173
< This requires the TOAST column to be stored EXTERNAL.
> This requires the TOAST column to be stored EXTERNAL.
359,360c359,360
< One complexity is whether moving a schema should move all existing
< schema objects or just define the location for future object creation.
> One complexity is whether moving a schema should move all existing
> schema objects or just define the location for future object creation.
364,365c364,365
< Currently non-global system tables must be in the default database
< schema. Global system tables can never be moved.
> Currently non-global system tables must be in the default database
> schema. Global system tables can never be moved.
371,375c371,375
< This might require some background daemon to maintain clustering
< during periods of low usage. It might also require tables to be only
< paritally filled for easier reorganization. Another idea would
< be to create a merged heap/index data file so an index lookup would
< automatically access the heap data too.
> This might require some background daemon to maintain clustering
> during periods of low usage. It might also require tables to be only
> paritally filled for easier reorganization. Another idea would
> be to create a merged heap/index data file so an index lookup would
> automatically access the heap data too.
379,380c379,380
< To do this, determine the ideal cluster index for each system
< table and set the cluster setting during initdb.
> To do this, determine the ideal cluster index for each system
> table and set the cluster setting during initdb.
385,386c385,386
< This requires the use of a savepoint before each COPY line is
< processed, with ROLLBACK on COPY failure.
> This requires the use of a savepoint before each COPY line is
> processed, with ROLLBACK on COPY failure.
395,398c395,398
< This requires using the row ctid to map cursor rows back to the
< original heap row. This become more complicated if WITH HOLD cursors
< are to be supported because WITH HOLD cursors have a copy of the row
< and no FOR UPDATE lock.
> This requires using the row ctid to map cursor rows back to the
> original heap row. This become more complicated if WITH HOLD cursors
> are to be supported because WITH HOLD cursors have a copy of the row
> and no FOR UPDATE lock.
405,406c405,406
< Because WITH HOLD cursors exist outside transactions, this allows
< them to be listed so they can be closed.
> Because WITH HOLD cursors exist outside transactions, this allows
> them to be listed so they can be closed.
413,415c413,415
< This is useful for returning the auto-generated key for an INSERT.
< One complication is how to handle rules that run as part of
< the insert.
> This is useful for returning the auto-generated key for an INSERT.
> One complication is how to handle rules that run as part of
> the insert. 422c422
< This is basically the same as SET search_path.
> This is basically the same as SET search_path.
426,427c426,427
< This requires a checking function to be called after the server
< configuration file is read.
> This requires a checking function to be called after the server
> configuration file is read. 432c432
< Currently only constants are supported.
> Currently only constants are supported.
438,439c438,439
< This requires the cached PL/PgSQL byte code to be invalidated when
< an object referenced in the function is changed.
> This requires the cached PL/PgSQL byte code to be invalidated when
> an object referenced in the function is changed.
512,513c512,513
< Document differences between ecpg and the SQL standard and
< information about the Informix-compatibility module.
> Document differences between ecpg and the SQL standard and
> information about the Informix-compatibility module.
Bruce Momjian [Mon, 18 Oct 2004 03:27:14 +0000 (03:27 +0000)]
Update wording:
* Allow a database in tablespace t1 with tables created in tablespace t2
to be used as a template for a new database created with default
tablespace t2
All objects in the default database tablespace must have default tablespace
specifications. This is because new databases are created by copying
directories. If you mix default tablespace tables and tablespace-specified
tables in the same directory, creating a new database from such a mixed
directory would create a new database with tables that had incorrect
explicit tablespaces. To fix this would require modifying pg_class in the
newly copied database, which we don't currently do.
Bruce Momjian [Mon, 18 Oct 2004 02:56:42 +0000 (02:56 +0000)]
Add:
>
> * Allow a database in tablespace t1 with tables created in tablespace t2
> to be used as a template for a new database created with default
> tablespace t2
>
> All objects in the default database tablespace must have default tablespace
> specifications. This is because new databases are created by copying
> directories. If you mix default tablespace tables and tablespace-specified
> tables in the same directory, creating a new database from such a mixed
> directory would create a new database with tables that had incorrect
> explicit tablespaces. To fix this would require modifying pg_class in the
> newly copied database, which we don't currently do.
Tom Lane [Sun, 17 Oct 2004 22:01:51 +0000 (22:01 +0000)]
Allow background writing to be shut down by setting limit values to zero.
This does not disable the bgwriter process: it still has to wake up often
enough to collect fsync requests from backends in a timely fashion. But
it responds to the recent gripe about not being able to prevent the disk
from being spun up constantly.
Tom Lane [Sun, 17 Oct 2004 20:47:21 +0000 (20:47 +0000)]
Give a more user-friendly error message in situation where CREATE DATABASE
specifies a new default tablespace and the template database already has
some tables in that tablespace. There isn't any way to solve this fully
without modifying the clone database's pg_class contents, so for now the
best we can do is issue a better error message.
Tom Lane [Sun, 17 Oct 2004 20:02:26 +0000 (20:02 +0000)]
Make locale_messages_assign() really work on Windows; the prior hack
only covered the case of assigning "", and failed to recognize that
actually setlocale(LC_MESSAGES,...) does not work at all on this platform.
Magnus Hagander, some code prettification by Tom Lane.
Tom Lane [Sat, 16 Oct 2004 22:52:55 +0000 (22:52 +0000)]
Remove dllist.c from libpq. It's overkill for what libpq needs; we can
just stick a list-link into struct PGnotify instead. Result is a smaller
faster and more robust library (mainly because we reduce the number of
malloc's and free's involved in notify processing), plus less pollution
of application link-symbol namespace.
Tom Lane [Sat, 16 Oct 2004 21:50:02 +0000 (21:50 +0000)]
Include dllist.c directly instead of assuming that libpq will provide it.
Whack some semblance of project-conventions-conformance into pg_autovacuum.h.
Tom Lane [Sat, 16 Oct 2004 20:10:57 +0000 (20:10 +0000)]
Generate the various .def files for libpq DLLs from a single list of
exportable functions. The .def files are removed from CVS, but will
still be present in distribution tarballs, since we can't assume that
Windows boxes will have sed.