So having upgraded to 8.1.10, I thought I'd try out a few things...
# /usr/pkg/bin/pg_dumpall
--
-- PostgreSQL database cluster dump
--
\connect postgres
--
-- Roles
--
CREATE ROLE postgres;
ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN;
CREATE ROLE root;
ALTER ROLE root WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN;
--
-- Database creation
--
REVOKE ALL ON DATABASE template1 FROM PUBLIC;
REVOKE ALL ON DATABASE template1 FROM postgres;
GRANT ALL ON DATABASE template1 TO postgres;
\connect postgres
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: out of memory
DETAIL: Failed on request of size 20.
pg_dump: The command was: LOCK TABLE public.foo IN ACCESS SHARE MODE
pg_dumpall: pg_dump failed on database "postgres", exiting
# SELECT * FROM foo LIMIT 1;
ERROR: out of memory
DETAIL: Failed on request of size 20.
I don't know if this is of any significance:
# \l
List of databases
Name | Owner | Encoding
-----------+----------+-----------
postgres | postgres | SQL_ASCII
template0 | postgres | SQL_ASCII
template1 | postgres | SQL_ASCII
(3 rows)
# /usr/pkg/bin/psql -U postgres template1
psql: FATAL: out of memory
DETAIL: Failed on request of size 20.
What puzzles me is why the transaction log hasn't
resulted in postgresql being able to restore itself
to a known clean state.
Darren