PostgresSQL 每天将分区表加入集群环境

1.编写脚本AddTableToPartition.sh
该脚本每天自动生成两个文件,一个是数据库建表以及规则的DDL脚本
一个是调用slony集群命令slonik的脚本


#!/usr/bin/perl -w
#
#
use strict;
use POSIX qw(strftime);

$| = 1;


my $tk = time;
my $date = strftime "%Y%m%d", localtime($tk);
my $date_2 = strftime "%Y-%m-%d", localtime($tk);

my $sql_file = 'CreateTable.sql';
my $cmd_file = 'slonik.sh';

my $SQL_TMPL = <<EOF;
------Create table
CREATE TABLE views_$date
(
CHECK (crdate >= '$date_2'::date AND crdate < ('$date_2'::date + 1))
) INHERITS (views)
WITHOUT OIDS;
ALTER TABLE views_$date ADD PRIMARY KEY (id);
ALTER TABLE views_$date OWNER TO slony;
-------Create Rule
CREATE OR REPLACE RULE view_rule_$date AS
ON INSERT TO views
WHERE new.crdate >= '$date_2'::date AND new.crdate < ('$date_2'::date + 1) DO INSTEAD INSERT INTO views_$date (crdate, ad_id, client_ip, fb_uid, bebo_uid, earn_id, referer, agent, ms_uid, hi5_uid)
VALUES (new.crdate, new.ad_id, new.client_ip, new.fb_uid, new.bebo_uid, new.earn_id, new.referer, new.agent, new.ms_uid, new.hi5_uid);
select "_BeboFace".replicate_partition((SELECT COALESCE(MAX(tab_id), 0) + 1 FROM "_BeboFace".sl_table), 'public'::text, 'views_$date'::text, NULL::text, 'Views Partition for $date'::text);

EOF

my $CMD_TMPL = <<EOF;
#!/bin/sh
slonik <<_EOF_
include <data.nfo>
execute script ( set id = 1, event node = 1, filename='$sql_file');
_EOF_

EOF

open F,">$sql_file" or die "Can't open file $sql_file: $!";
print F $SQL_TMPL;
close F;

open F,">$cmd_file" or die "Can't open file $cmd_file: $!";
print F $CMD_TMPL;
close F;

#my $res = `$cmd_file`;
#print "$res";



2,生成脚本后,将执行slonik脚本的命令加入crontab,定时调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值