Search Postgresql Archives

Re: Dynamically generating DDL for postgresql object

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Jun 15, 2007, at 2:31 PM, Mark Soper wrote:

I’d like to dynamically generate a SQL script that pulls together complete DDL (CREATE, ALTER, etc.) for specific objects (especially constraints) in my PostgreSQL 8 database. I want to use this for our development project’s schema migration process, which involves dumping the data, making schema changes, recreating the database, temporarily removing constraints, restoring the data, and re- applying the constraints (this last step requires the dynamic DDL described above).



I’ve noticed that pgAdmin’s “DDL Report” feature can retrieve this DDL for many types of objects – not sure how much work it has to do to build the SQL it’s displaying here. But I haven’t seen anything about getting this directly from the database using SQL , psql, etc. I’ve only seen reference to this as a proposed project on the PostgreSQL Google SoC page



Anyone know how to get object DDL SQL through a script? Ideas on alternative approaches would also be appreciated.

There are a number of built-in functions for getting the SQL DDL, but it depends on the version you are using. Here is what I see for 8.2:


=== psql 1 ===

\df pg_get*

                               List of functions
Schema | Name | Result data type | Argument data types ------------+------------------------+------------------ +-----------------------
pg_catalog | pg_get_constraintdef   | text             | oid
pg_catalog | pg_get_constraintdef   | text             | oid, boolean
pg_catalog | pg_get_expr            | text             | text, oid
pg_catalog | pg_get_expr | text | text, oid, boolean
pg_catalog | pg_get_indexdef        | text             | oid
pg_catalog | pg_get_indexdef | text | oid, integer, boolean
pg_catalog | pg_get_ruledef         | text             | oid
pg_catalog | pg_get_ruledef         | text             | oid, boolean
pg_catalog | pg_get_serial_sequence | text             | text, text
pg_catalog | pg_get_triggerdef      | text             | oid
pg_catalog | pg_get_userbyid        | name             | oid
pg_catalog | pg_get_viewdef         | text             | oid
pg_catalog | pg_get_viewdef         | text             | oid, boolean
pg_catalog | pg_get_viewdef         | text             | text
pg_catalog | pg_get_viewdef         | text             | text, boolean
(15 rows)

For example, if you know the table oid, you can get the constraint definitions with something like this:

select 'CONSTRAINT ' || conname || ' ' || pg_get_constraintdef(oid) || ';' as condef
from pg_constraint where conrelid = oidxyz;

Getting the full DDL for a table requires a lot more work using the system catalogs. See pg_dump for hints.



John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux