好吧,我不确定这是不是Bug,不过按我的想法,设置了 ItemIndex 属性,显示时应该让记录滚动到可视区,让我看见,但却就是看不见呀看不见~~~~ 跟进源码,原来是 ContentLayout 没有值造成的,所以,要修正这一问题的简单做法就是先调用一下列表框的ApplyStyleLookup 方法。 所以,截止 B
标签:自动
PostgreSQL创建分区编写过程小结
这是一个实例,我要对一个数据库表的数据创建一个统计缓存,这个统计缓存由于数据量较大,我采用了按年分布表的方式。首先设计了基表,所有的数据分区都是基于这个基表继承而来。为了方便分区和维护,我专门写了一个函数来创建分区子表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
create or replace function stat_partition(stat_year integer) returns void as $BODY$ declare sql character varying; tablename character varying; tblyear character varying; i integer; cur cursor for select p.relname from pg_inherits i,pg_class p where i.inhparent=(select oid from pg_class where relname='base_stat') and p.oid=i.inhrelid order by p.relname; begin tablename='stat_'||cast(stat_year as character varying); --创建表 sql='create table '||tablename|| ' (constraint pk_'||tablename||' primary key (id),'|| ' constraint chk_'||tablename||' check ((from_date>='''||cast(stat_year as character varying)||'-1-1''::date) and (to_date<='''||cast(stat_year+1 as character varying)||'-1-1''::date)))'|| ' inherits (base_stat);'; execute sql; --表注释 sql='comment on table '||tablename|| ' is '''||cast(stat_year as character varying)||' 年统计结果汇总缓存表'';'; execute sql; -- 表索引 -- areacode sql='create index idx_'||tablename||'_areacode on '||tablename||' (areacode);'; execute sql; -- from_age sql='create index idx_'||tablename||'_from_age on '||tablename||' (from_age);'; execute sql; -- to_age sql='create index idx_'||tablename||'_to_age on '||tablename||' (to_age);'; execute sql; -- from_date sql='create index idx_'||tablename||'_from_date on '||tablename||' (from_date);'; execute sql; -- to_date sql='create index idx_'||tablename||'_to_date on '||tablename||' (to_date);'; execute sql; -- illcode sql='create index idx_'||tablename||'_to_illcode on '||tablename||' (illcode);'; execute sql; -- 创建触发器函数 sql='create or replace function tgr_base_stat() returns trigger as $$ '||chr(10)||'begin'||chr(10); open cur; fetch cur into tablename; i=0; while found loop tblyear=right(tablename,4); if i=0 then sql=sql||'if New.from_date>='''||tblyear||'-1-1'' and New.to_date<='''||cast(cast(tblyear as integer)+1 as character varying)||'-1-1'' then '||chr(10)|| 'insert into '||tablename||' values (New.*);'||chr(10); else sql=sql||'elsif New.from_date>='''||tblyear||'-1-1'' and New.to_date<='''||cast(cast(tblyear as integer)+1 as character varying)||'-1-1'' then '||chr(10)|| 'insert into '||tablename||' values (New.*);'||chr(10); end if; i=i+1; fetch cur into tablename; end loop; close cur; sql=sql||'else '||chr(10)||' raise exception ''指定的记录无法自动插入任何一个分区,请检查数据或调用stat_partition(%)建立新的分区。'',extract(year from New.from_date);' ||chr(10)||'end if;'||chr(10)||'return NULL;'||chr(10)|| 'end; $$ language plpgsql;'; execute sql; if not exists (select * from pg_trigger where tgname='stat_insert_redirect') then begin sql='create trigger stat_insert_redirect before insert on base_stat for each row execute procedure tgr_base_stat();'; execute sql; end; end if; end; $BODY$ language plpgsql; |
函数主要做了以下事情: (1)用