dbtoyaml - Database to YAML
dbtoyaml -- extract the schema of a PostgreSQL database in YAML format
dbtoyaml [option...] dbname
dbtoyaml is a utility for extracting the schema of a PostgreSQL database to a YAML formatted specification. Note that JSON is an official subset of YAML version 1.2, so the dbtoyaml output should also be compatible with JSON tools.
The output format is as follows:
schema public: owner: postgres privileges: - postgres: - all - PUBLIC: - all table t1: check_constraints: check_expr: (c2 > 123) columns: - c2 columns: - c1: not_null: true type: integer - c2: type: smallint - c3: default: 'false' type: boolean - c4: type: text foreign_keys: t1_c2_fkey: columns: - c2 references: columns: - c21 schema: s1 table: t2 owner: alice primary_key: t1_pkey: columns: - c1 schema s1: owner: bob privileges: - bob: - all - alice: - all table t2: columns: - c21: not_null: true type: integer - c22: type: character varying(16) owner: bob primary_key: t2_pkey: columns: - c21 privileges: - bob: - all - PUBLIC: - select - alice: - insert: grantable: true - delete: grantable: true - update: grantable: true - carol: grantor: alice privs: - insert
The above should be mostly self-explanatory. The example database has two tables, named t1 and t2, the first --owned by user 'alice'-- in the public schema and the second --owned by user 'bob'-- in a schema named s1 (also owned by 'bob'). The columns: specifications directly under each table list each column in that table, in the same order as shown by PostgreSQL. The specifications primary_key:, foreign_keys: and check_constraints: define PRIMARY KEY, FOREIGN KEY and CHECK constraints for a given table. Additional specifications (not shown) define unique constraints and indexes.
User 'bob' has granted all privileges to 'alice' on the s1 schema. On table t2, he also granted SELECT to PUBLIC; INSERT, UPDATE and DELETE to 'alice' with GRANT OPTION; and she has in turn granted INSERT to user 'carol'.
dbtoyaml currently supports extracting information about nearly all types of PostgreSQL database objects. See api-ref for a list of supported objects.
dbtoyaml accepts the following command-line arguments (in addition to the cmdargs):
Specifies the name of the database whose schema is to extracted.
-n schema, ---schema= schema
Extracts only a schema matching schema. By default, all schemas are extracted. Multiple schemas can be extracted by using multiple -n switches. Note that normally all objects that belong to the schema are extracted as well, unless excluded otherwise.
-N schema, ---exclude-schema= schema
Does not extract schema matching schema. This can be given more than once to exclude several schemas.
Do not output object ownership information. By default, as seen in the sample output above, database objects (schemas, tables, etc.) that can be owned by some user, are shown with an "owner: username" element. The -O switch suppresses all those lines.
-t table, ---table= table
Extract only tables matching table. Multiple tables can be extracted by using multiple -t switches. Note that selecting a table may cause other objects, such as an owned sequence, to be extracted as well
-T table, ---exclude-table= table
Do not extract tables matching table. Multiple tables can be excluded by using multiple -T switches.
Do not output access privilege information. By default, as seen in the sample output above, if specific GRANTs have been issued on various objects (schemas, tables, etc.), the privileges are shown under each object. The -x switch suppresses all those lines.
To extract a database called moviesdb into a file:
dbtoyaml moviesdb > moviesdb.yaml
To extract only the schema named store:
dbtoyaml --schema=store moviesdb > moviesdb.yaml
To extract the tables named film and genre:
dbtoyaml -t film -t genre moviesdb -o moviesdb.yaml
To extract objects, to standard output, except those in schemas product and store:
dbtoyaml -N product -N store moviesdb