背景说明

Oracle 可以通过DBMS_METADATA.GET_DDL函数获取表的建表语句,但是PolarDB-O目前不支持。

解决方案

  • an-> \d+ t1
                                                Table "public.t1"
     Column |         Type          | Collation | Nullable | Default | Storage  | Stats target | Description
     --------+-----------------------+-----------+----------+---------+----------+--------------+------------- 
    id     | integer               |           |          |         | plain    |              | 
     name   | character varying(30) |           |          |         | extended |              | 
    Indexes:
        "idx1" UNIQUE, btree (id)
        "idx2" btree (name)
    Check constraints:
        "con1" CHECK (id < 2000000)
    Access method: heap
    说明 \d+可以看到表结构,但不是建表语句。
  • 可以通过创建函数来实现:
    psql=#create extension plperlu;
    postgres=# CREATE OR REPLACE FUNCTION GET_DDL(text) RETURNS text
    AS 'my $cmd=shift; return `cd /tmp;$cmd`;' LANGUAGE plperlu;
    CREATE FUNCTION
    postgres=# select GET_DDL('pg_dump -s -t t1 ddl | egrep -v "^--|^$"');
                      get_ddl
    ----------------------------------------------------------------
    CREATE TABLE public.t1 (                                                           +
        id integer,                                                                    + 
       name character varying(30),                                                     + 
       CONSTRAINT con1 CHECK ((id < 2000000))                                          +
    );                                                                                 +
    ALTER TABLE public.t1 OWNER TO postgres;                             +
    CREATE UNIQUE INDEX idx1 ON public.t1 USING btree (id);      +
    CREATE INDEX idx2 ON public.t1 USING btree (name);             + 
  • 您可以在客户端管理工具比如pgadmin,dbeaver查看,以dbeaver为例:tp