Обсуждение: pg_dump --create --schema-only, how to suppress template1 functions ?

Поиск
Список
Период
Сортировка

pg_dump --create --schema-only, how to suppress template1 functions ?

От
"Scott Abel"
Дата:
I was using pg_dump --create --schema-only (or so I thought) to
maintain source files for my database that I could check into my
revision control system.  Now I just tried to recreate the source file
from an updated version of the DB, and I'm finding that it dumps all
the built-in stuff from template1 (not stuff I added, AFAIK).

The last file I checked in used template1 in the "CREATE DATABASE"
statement and only had CREATE statements for functions and tables that
I created in my database.   All the stuff from template1 was then
created implicitly by the template1 clause in the CREATE DATABASE
statement.  This is exactly the behavior I want.

Here's the exact command line I used for 8.2.4 pg_dump in both cases
(unless I'm mistaken and somehow I ran a different version of my
script before):
pg_dump -U postgres -H myhost --create --schema-only --encoding=UTF8
--file=myoutputfile mydbname

Now when I try to run it (still with 8.2.4), the CREATE DATABASE
statement generated uses template0 and then pg_dump regurgitates every
function in my database, including those that came from template1.  I
don't use most of the functions and don't want them generated in the
schema file; I really would like to figure out how to get back the old
behavior of pg_dump generating a CREATE DATABASE statement that uses
template1 as the template and only generates DDL for my tables and
functions.   How do I do this?

Re: pg_dump --create --schema-only, how to suppress template1 functions ?

От
Tom Lane
Дата:
"Scott Abel" <sabel@yahoo.com> writes:
> Now when I try to run it (still with 8.2.4), the CREATE DATABASE
> statement generated uses template0 and then pg_dump regurgitates every
> function in my database, including those that came from template1.  I
> don't use most of the functions and don't want them generated in the
> schema file; I really would like to figure out how to get back the old
> behavior of pg_dump generating a CREATE DATABASE statement that uses
> template1 as the template and only generates DDL for my tables and
> functions.   How do I do this?

I hate to disillusion you, but there never has been any such behavior.
pg_dump can barely tell the built-in functions from yours; telling
ones that came from template1 additions apart from ones that were added
to the specific database is well beyond its powers.

What you might be able to do is segregate the template1 additions from
the local ones by schema, and then use schema dump restrictions.

            regards, tom lane