Re: Get the table creation DDL - Mailing list pgsql-general
From | Igor Korot |
---|---|
Subject | Re: Get the table creation DDL |
Date | |
Msg-id | CA+FnnTwos4mgzu+8ECsU=ZFJmKi8QEBpEdsqAJ5CHnDZbub6Cw@mail.gmail.com Whole thread Raw |
In response to | Re: Get the table creation DDL (Rob Sargent <robjsargent@gmail.com>) |
Responses |
Re: Get the table creation DDL
Re: Get the table creation DDL |
List | pgsql-general |
Hi, On Sun, Jul 10, 2022 at 8:09 PM Rob Sargent <robjsargent@gmail.com> wrote: > > > > > On Jul 10, 2022, at 6:16 PM, Igor Korot <ikorot01@gmail.com> wrote: > > > > Hi, > > > >> On Sun, Jul 10, 2022 at 7:02 PM Mladen Gogala <gogala.mladen@gmail.com> wrote: > >> > >> On 7/10/22 17:00, Igor Korot wrote: > >> > >> I understand. > >> The Problem is that I need to put this inside the C/ODBC interface for > >> my project. > >> > >> I'm sure it is not a problem when people are working out of psql or > >> writing some scripts, > >> but for me it is painful to go and try to recreate it. > >> > >> Now, I'm not sure if this extension can be freely re-used (query > >> extracted and placed > >> inside someone else's project). > >> > >> Thank you. > >> > >> Igor, https://github.com/MichaelDBA/pg_get_tabledef provides "pg_get_tabledef" function which can be called from SQLand therefore used from ODBC/C. This "extension" is nothing PL/PGSQL source code of the function that returns DDL. That'sabout it. This is how it works: > > > > I understand. > > > > The question here - does this "extension'' is a part of standard > > PostgreSQL install? > > And if not - can I copy and paste that code in my program? > > > > Thank you. > > > >> > >> mgogala@umajor Downloads]$ psql -h postgres -f pg_get_tabledef-main/pg_get_tabledef.sql > >> Password for user mgogala: > >> DO > >> CREATE FUNCTION > >> [mgogala@umajor Downloads]$ psql -h postgres > >> Password for user mgogala: > >> psql (13.6, server 14.4) > >> WARNING: psql major version 13, server major version 14. > >> Some psql features might not work. > >> Type "help" for help. > >> > >> mgogala=# select pg_get_tabledef('mgogala','emp'); > >> pg_get_tabledef > >> --------------------------------------------------------------------- > >> CREATE TABLE mgogala.emp ( + > >> empno smallint NOT NULL, + > >> ename character varying(10) NULL, + > >> job character varying(9) NULL, + > >> mgr smallint NULL, + > >> hiredate timestamp without time zone NULL, + > >> sal double precision NULL, + > >> comm double precision NULL, + > >> deptno smallint NULL, + > >> CONSTRAINT emp_pkey PRIMARY KEY (empno), + > >> CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept(deptno)+ > >> ) TABLESPACE pg_default; + > >> + > >> > >> (1 row) > >> > >> So, you clone the Git repository, run the "CREATE FUNCTION" script and, voila, you can get the DDL for the desired table.Here is the same stuff produced by the psql utility: > >> > >> mgogala=# \d emp > >> Table "mgogala.emp" > >> Column | Type | Collation | Nullable | Default > >> ----------+-----------------------------+-----------+----------+--------- > >> empno | smallint | | not null | > >> ename | character varying(10) | | | > >> job | character varying(9) | | | > >> mgr | smallint | | | > >> hiredate | timestamp without time zone | | | > >> sal | double precision | | | > >> comm | double precision | | | > >> deptno | smallint | | | > >> Indexes: > >> "emp_pkey" PRIMARY KEY, btree (empno) > >> Foreign-key constraints: > >> "fk_deptno" FOREIGN KEY (deptno) REFERENCES dept(deptno) > >> > >> And here is using the function from an ODBC connection: > >> > >> [mgogala@umajor Downloads]$ isql mgogala-pg > >> +---------------------------------------+ > >> | Connected! | > >> | | > >> | sql-statement | > >> | help [tablename] | > >> | quit | > >> | | > >> +---------------------------------------+ > >> SQL> select pg_get_tabledef('mgogala','emp'); > >> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ > >> | pg_get_tabledef | > >> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ > >> | CREATE TABLE mgogala.emp ( > >> empno smallint NOT NULL, > >> ename character varying(10) NULL, > >> job character varying(9) NULL, > >> mgr smallint NULL, > >> hiredate timestamp without time zone NULL, > >> sal double precision NULL, > >> comm double precision NULL, > >> deptno smallint NULL, > >> CONSTRAINT emp_pkey PR...| > >> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ > >> SQLRowCount returns 1 > >> 1 rows fetched > >> SQL> > >> > >> > >> The function description looks like this: > >> > >> mgogala=# \df pg_get_tabledef > >> > >> List of functions > >> Schema | Name | Result data type | > >> Argument data types > >> | Typ > >> e > >> --------+-----------------+------------------+---------------------------------- > >> -------------------------------------------------------------------------------- > >> ---------------------------------------------------------------------------+---- > >> -- > >> public | pg_get_tabledef | text | in_schema character varying, in_t > >> able character varying, in_fktype tabledef_fkeys DEFAULT 'FKEYS_INTERNAL'::table > >> def_fkeys, in_trigger tabledef_trigs DEFAULT 'NO_TRIGGERS'::tabledef_trigs | fun > >> c > >> (1 row) > >> > >> As expected, the function returns the "text" data type. > >> > >> Regards > >> > >> -- > >> Mladen Gogala > >> Database Consultant > >> Tel: (347) 321-1217 > >> https://dbwhisperer.wordpress.com > > > > > > Do it properly. Make it part of your coding infrastructure so it’s available in the next environment. You’ll thank yourself How should I do that? Thank you.
pgsql-general by date: