From 59b3f6e9622147b5500ddd89b4e3fe2941cb572f Mon Sep 17 00:00:00 2001 From: Gin Date: Wed, 6 Jul 2022 20:05:12 +0800 Subject: [PATCH] improve list tables for pgsql (#1790) --- .../consts/consts_gen_dao_template_dao.go | 1 + contrib/drivers/pgsql/pgsql.go | 24 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cmd/gf/internal/consts/consts_gen_dao_template_dao.go b/cmd/gf/internal/consts/consts_gen_dao_template_dao.go index 4fedb480e..6155eecfd 100644 --- a/cmd/gf/internal/consts/consts_gen_dao_template_dao.go +++ b/cmd/gf/internal/consts/consts_gen_dao_template_dao.go @@ -40,6 +40,7 @@ package internal import ( "context" + "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" ) diff --git a/contrib/drivers/pgsql/pgsql.go b/contrib/drivers/pgsql/pgsql.go index cc1037c41..c1c3a3f5c 100644 --- a/contrib/drivers/pgsql/pgsql.go +++ b/contrib/drivers/pgsql/pgsql.go @@ -138,13 +138,27 @@ func (d *Driver) Tables(ctx context.Context, schema ...string) (tables []string, if err != nil { return nil, err } - query := "SELECT TABLENAME FROM PG_TABLES WHERE SCHEMANAME = 'public' ORDER BY TABLENAME" + querySchema := "public" if len(schema) > 0 && schema[0] != "" { - query = fmt.Sprintf( - "SELECT TABLENAME FROM PG_TABLES WHERE SCHEMANAME = '%s' ORDER BY TABLENAME", - schema[0], - ) + querySchema = schema[0] } + // list table names exclude partitions + query := fmt.Sprintf(` +SELECT + c.relname +FROM + pg_class c +INNER JOIN pg_namespace n ON + c.relnamespace = n.oid +WHERE + n.nspname = '%s' + AND c.relkind IN ('r', 'p') + AND c.relpartbound IS NULL + AND PG_TABLE_IS_VISIBLE(c.oid) +ORDER BY + c.relname`, + querySchema, + ) result, err = d.DoSelect(ctx, link, query) if err != nil { return