Exemplo n.º 1
0
        private TableInfo CreateTable(string tableName)
        {
            TableInfo table = new TableInfo()
            {
                Name = tableName
            };

            string sql = $@"select 
                            ordinal_position as Colorder,
                            column_name as ColumnName,
                            data_type as TypeName,
                            coalesce(character_maximum_length,numeric_precision,-1) as Length,
                            numeric_scale as Scale,
                            case is_nullable when 'NO' then 0 else 1 end as CanNull,
                            column_default as DefaultVal,
                            case  when position('nextval' in column_default)>0 then 1 else 0 end as IsIdentity, 
                            case when b.pk_name is null then 0 else 1 end as IsPK,
                            c.DeText as colcomment
                            from information_schema.columns 
                            left join (
                                select pg_attr.attname as colname,pg_constraint.conname as pk_name from pg_constraint  
                                inner join pg_class on pg_constraint.conrelid = pg_class.oid 
                                inner join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid and  pg_attr.attnum = pg_constraint.conkey[1] 
                                inner join pg_type on pg_type.oid = pg_attr.atttypid
                                where pg_class.relname = '{tableName}' and pg_constraint.contype='p' 
                            ) b on b.colname = information_schema.columns.column_name
                            left join (
                                select attname,description as DeText from pg_class
                                left join pg_attribute pg_attr on pg_attr.attrelid= pg_class.oid
                                left join pg_description pg_desc on pg_desc.objoid = pg_attr.attrelid and pg_desc.objsubid=pg_attr.attnum
                                where pg_attr.attnum>0 and pg_attr.attrelid=pg_class.oid and pg_class.relname='{tableName}'
                            )c on c.attname = information_schema.columns.column_name
                            where table_schema='public' and table_name='{tableName}' order by ordinal_position asc;";

            DataTable columnTable = helper.GetDataTable(sql);

            for (int c = 0; c < columnTable.Rows.Count; ++c)
            {
                ColumnInfo column = CreateColumn(columnTable.Rows[c]);
                table.ColumnCollection.AddColumn(column);
                table.CommentCollection.AddComment(CreateComment(column, table));
            }

            sql = $"select * from pg_indexes where tablename='{tableName.ToLower()}'";
            DataTable indexTable = helper.GetDataTable(sql);

            for (int i = 0; i < indexTable.Rows.Count; ++i)
            {
                table.IndexCollection.AddIndex(CreateIndex(indexTable.Rows[i], table));
            }

            return(table);
        }
Exemplo n.º 2
0
        public DatabaseInfo CreateDatabaseInfo()
        {
            DatabaseInfo database = new DatabaseInfo();

            using (helper = new PostgreSqlHelper(Connect))
            {
                string    sql       = @"SELECT tablename FROM pg_tables 
                                WHERE tablename NOT LIKE 'pg%'  
                                AND tablename NOT LIKE 'sql_%'
                                ORDER BY tablename;";
                DataTable nameTable = helper.GetDataTable(sql);

                for (int i = 0; i < nameTable.Rows.Count; ++i)
                {
                    database.AddTable(CreateTable(nameTable.Rows[i][0].ToString()));
                }
            }
            return(database);
        }