Обсуждение: pg_dump --create --schema-only, how to suppress template1 functions ?
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?
"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