PostgreSQL的规则系统

4 月 11th, 2010 | Posted by | Filed under 未分类

PostgreSQL提供了一种叫做规则(Rule)的机制,来实现一些与触发器不同的更加自定义的功能。规则系统介于查询编译器和执行优化器之间,根据规则及修改查询。

基本语法:

CREATE RULE 规则名 AS
    ON {SELECT | INSERT | UPDATE | DELETE}
    TO 表名 [WHERE 规则条件]
    DO [INSTEAD] {NOTHING | 命令 | (命令, 命令...)}

PostgreSQL中的视图实际上就是通过RULE来实现的。

例如建立一个视图:

CREATE VIEW view_1 AS SELECT * FROM table_1;

PostgreSQL实际将这个语句翻译为规则:

CREATE TABLE table_view_1 (涉及的列名);

CREATE RULE return AS 
    ON SELECT TO table_view_1 DO INSTEAD 
    SELECT * FROM table_1;

这样在查询view_1视图时,PostgreSQL实际上把它转换为对隐含的表table_view_1的查询。

在仅仅需要查询的时候,CREATE VIEW是更合适的语法,但是这这样建立的视图是不能做修改操作的,但是通过规则是可以做到的。

例如我们要更新view_1视图:

CREATE TABLE table_view_1 (涉及的列名);

CREATE RULE update_view_1 AS 
    ON UPDATE TO table_view_1
    DO UPDATE table_1 SET col_1 = new.col_1
       WHERE col_2 = new.col_2;

有了这样的规则,我们执行UPDATE view_1 SET col_1=x WHERE col_2=y;的时候,实际上就更新了table_1,这样就实现了更新视图。对于多表的视图,也可以这样操作。

每周推特 2010-04-11

4 月 11th, 2010 | Posted by | Filed under 生活轨迹
  • @sdh5724 校长开始研究模式识别了哇 in reply to sdh5724 #
  • 看《风林火山》,也就武田和上杉能算得上有点战略,其他大名“大战”就是村长械斗抢地盘,不过我始终不理解日本无论哪个时代,天皇都没人敢动,虽然幕府将军掌握实权,但是为啥就是不敢篡位,在天朝,历朝历代将军权倾朝野,皇帝必然死翘翘。 #
  • @sdh5724 咱们的环境不太好模拟,从CodePK的平台接口来看,数据没有共享区,全靠字符串参数传数据,本地多线程方式调通了,改成接口传上去隐含的指针操作依然会Crash掉Master,因为Worker会跑在不同主机上,但是全局内存不会传过去,就这点麻烦。 in reply to sdh5724 #
  • 花了两天搞CodePK,明天要搞XML提取SQL的程序了,wxWidgets功能有点弱,长远考虑还是QT写吧,免得以后又重构麻烦,自带的OCI接口可以静态编译,搞成单文件方便。 #
  • 相比MFC和wcWidgtes的消息驱动,我还是喜欢QT/C#这样的事件驱动,事件去连接操作,代码控制起来会比较容易。 #
  • 我觉得一个能让开发人员快速上手的分布式系统,或者能提供自动序列化的接口,让数据的序列化与反序列化交由系统统一完成,或者对集群进行统一重新编址,分派到Worker的代码,能通过变量的全局地址去相应的主机自动寻址需要的数据。 #
  • RT @Fenng: 王江民的自强不息曾经不知鼓舞了多少IT人,王先生一路走好! in reply to Fenng #
  • 不知道为啥QT的XML解析组件总是报iBATIS的XML不符合标准,用Perl的XML::Simple就行,QT就纯做界面好了。 #
  • 提取SQL完成,下面通过information_schema获取列的类型,然后填充到抽象的SQL,丢到数据库去拿执行计划。 #
  • RT @lewvip: 昨天配了眼镜花了1100多,其实也就是公司能给报眼镜费我在配那么贵的,没觉得和几百块的眼镜什么区别 {配眼镜都能报销……} in reply to lewvip #
  • 今天是蒋公逝世35周年 #
  • 看进度明天让MySQL团队也用上SQL审核辅助工具是可能的~ #
  • CodePK,53进18胜出,18进6挂的很惨,只有一件T-shirt,但愿明年还有,很好玩 #
  • @asword2000 Oracle的搞出了原型,MySQL的我搞了XML提取SQL和执行计划提取,自动建议还没搞好,我想先做出自动建索引的部分,自动建议才好搞。 in reply to asword2000 #
  • 明天GF生日,送啥捏 #
  • @asword2000 成本太高,后半个月我就得要饭了 in reply to asword2000 #
  • 226路的司机我只想说,草泥马,连续两天到站不停,公交车开成F1,敢去投胎一样,逼我打车回家 #
  • @asword2000 把自己送过去就难了,我也想哇……飞机还得两小时呢 in reply to asword2000 #
  • RT @dttoo: 我喜欢工科的男银,不是读纯理论的,比如在我们家遥控板或者电话坏的了,我哥就能拆开,然后鼓捣鼓捣就好了,我就可以继续看电视了= =|| #
  • PGSQL连锁和信号量的控制都放出参数,NB #
  • @yanzisky1989 这种事情还是我来吧,你不专业~ in reply to yanzisky1989 #
  • 国家每年财政收入这么多,还好意思号召我们捐款,自己的钱哪去了,我们交了税还得捐款,我们P民就是党的ATM #
  • 测试库虽然没有线上库重要,但是单点也是需要避免的,停机一天的浪费的工资,估计能买好多台新服务器了。 #
  • 向一个正在做压力测试的数据库导入数据是一件多么悲剧的事情…… #
  • 关于二叉查找树、红黑树、平衡二叉树、B树的区别和联系,貌似大部分同事们都不太了解,做个PPT,有时间分享一下。 #
  • 就剩最后两笔导入了,速度…… #
  • 已经做好了RT @asword2000: @plinux 做完share一下,建议群发ali-tech^_^ #
  • 我竟然走到家了,我的体能还是很彪悍的,不过真的很累,一路上盼望taxi的期望都落空了,哎。。。睡觉! #
  • RT @qiyi: 哎,IE是各种不支持 {更悲剧的是只支持IE} #
  • @xlight 做成数据库算法与数据结构系列,会发在博客的 in reply to xlight #
  • 我的iBUS怎么就挂了捏 #
  • DBUS的socket拒绝访问导致I-BUS不能启动,HAL的错误导致DBUS不能正常读写socket,I-BUS的问题最终归结于HAL #
  • 貌似来了个PostgreSQL大牛 #
  • 越看设计模式越觉得我不会写程序,只是Writing,不是Coding #
  • 百阿就要来了,同事苦了,要顶我这一堆数据库 #
  • 看到CodePK颁奖的邮件,很郁闷的说,如果能早点反应过来不用sqrt,不带来精度问题,也许能冲进决赛 #
  • RT @kisafran: 真好…RT @yanghengjun: 最新新闻:波兰发言人表示,现在的波兰没有左派和右派,人民团结一致。啊,太美了,中国现在左中右都有啊,建议领导人集体自杀以团结国人,让我们重拾对未来的信心! #
  • 看07年的Discovery宇宙特辑,讲太阳的这一集,说如果太阳的耀斑正好旋转到对准地球,一次爆发相当于把一个珠穆朗玛峰的质量抛向地球……算算太阳活动周期,科学家认为下次太阳活动周期大约在2012年。我觉着2012这时间挺靠谱的,地球真不行了么 #
  • 如果太阳风暴袭向地球,强大到逆转地球的磁力线,离子随着磁力线到达地球表面,地球上跟电有关的一切东西将不可使用。而且这事发生过,1859年,只不过那时受影响的只是电报。现在可不一样了,全球停电几周,引发的混乱就不是那么简单了。 #
  • 火星果然比地球安全,火星是个铁核,强大的磁场足以保护火星表面不受太阳风的影响。也许生命的起源就是火星,火星的早期碎片把生命带到了地球,咱们以前都是火星人。地球太危险,咱还是回火星吧,这句话多么有前瞻性啊,哈哈。 #
  • RT @zhyu: 说我呐 RT @HolicAS: 考的再糟糕也比线高30+分RT @smy20011: 要达到什么成绩高考才叫“上一本没问题” //提前拿到保送资格 #
  • 帮朋友配了7台服务器的监控,累死了 #
  • RT @whitepoplar: 数据库系统概念无疑是数据库领域的bible {书太厚了,先从Ullman的数据库系统基础教程开始看,看了看也不基础……} #
  • @whitepoplar 我从大三看到现在才看了155页……悲剧啊,纯学术性的概念有的还是蛮难懂得,你看完了我来请教你 in reply to whitepoplar #
  • 为GF找一份在杭州的工作,PS.英语专业。 #
  • 补充:目前大三,实习。 #
  • PGSQL的遗传查询优化器真TMD牛B,处理45个表的关联查询都能给出不错的执行计划,System R的动态规划算法在这种情况下处理时间已经明显不行了。 #
  • RT @sdh5724: 其实, ubuntu对中文来说, 缺乏一个很好的字体。 需要去windows/mac上去偷几个字体, 这让我觉得很不爽。{文泉驿的字体还是蛮不错的吧,我很喜欢这套字体} #
  • @asword2000 没有编辑之类的办公室工作么,不指望她赚钱,满足下她想工作的愿望,还有就是能待一公司 in reply to asword2000 #

Powered by Twitter Tools

标签:

数据库算法与数据结构系列——B树相关

4 月 10th, 2010 | Posted by | Filed under 未分类

后续还会有排序相关,缓存相关,锁相关等内容。

Xfce下ZendStudio的报错处理

4 月 9th, 2010 | Posted by | Filed under 操作系统

为了轻量,我的Gentoo Linux用的Xfce桌面系统,一切都还不错,今天装ZendStudio遇到了些问题,记下。

安装的时候都很正常,解压下载的压缩包得到.bin文件,然后安装,也没有错,但是一启动就挂了。
查看了/home/plx/Zend/workspace/DefaultWorkspace7/.metadata/.log 发现如下异常:

!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTError: XPCOM error -2147467262
 at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:1688)
 at org.eclipse.swt.browser.Mozilla.setText(Mozilla.java:1911)
 at org.eclipse.swt.browser.Browser.setText(Browser.java:750)
 at org.eclipse.ui.internal.intro.impl.presentations.BrowserIntroPartImplementation.generateContentForPage(BrowserIntroPartImplementation.java:363)
 at org.eclipse.ui.internal.intro.impl.presentations.BrowserIntroPartImplementation.dynamicStandbyStateChanged(BrowserIntroPartImplementation.java:577)
 at org.eclipse.ui.internal.intro.impl.presentations.BrowserIntroPartImplementation.doStandbyStateChanged(BrowserIntroPartImplementation.java:784)
 at org.eclipse.ui.internal.intro.impl.model.AbstractIntroPartImplementation.standbyStateChanged(AbstractIntroPartImplementation.java:249)
 at org.eclipse.ui.internal.intro.impl.model.IntroPartPresentation.standbyStateChanged(IntroPartPresentation.java:443)
 at org.eclipse.ui.intro.config.CustomizableIntroPart.standbyStateChanged(CustomizableIntroPart.java:266)
 at org.eclipse.ui.internal.ViewIntroAdapterPart$2.run(ViewIntroAdapterPart.java:74)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
 at org.eclipse.ui.internal.ViewIntroAdapterPart.setStandby(ViewIntroAdapterPart.java:70)
 at org.eclipse.ui.internal.ViewIntroAdapterPart$1.propertyChanged(ViewIntroAdapterPart.java:55)
 at org.eclipse.ui.internal.WorkbenchPartReference.fireInternalPropertyChange(WorkbenchPartReference.java:375)
 at org.eclipse.ui.internal.WorkbenchPartReference.fireZoomChange(WorkbenchPartReference.java:540)
 at org.eclipse.ui.internal.PartPane.setZoomed(PartPane.java:356)
 at org.eclipse.ui.internal.PartStack.setZoomed(PartStack.java:1526)
 at org.eclipse.ui.internal.PartSashContainer.zoomIn(PartSashContainer.java:884)
 at org.eclipse.ui.internal.PartSashContainer.childRequestZoomIn(PartSashContainer.java:905)
 at org.eclipse.ui.internal.LayoutPart.requestZoomIn(LayoutPart.java:354)
 at org.eclipse.ui.internal.PartStack.setState(PartStack.java:1501)
 at org.eclipse.ui.internal.WorkbenchPage.setState(WorkbenchPage.java:3872)
 at org.eclipse.ui.internal.WorkbenchPage.toggleZoom(WorkbenchPage.java:3944)
 at org.eclipse.ui.internal.WorkbenchIntroManager.setIntroStandby(WorkbenchIntroManager.java:201)
 at org.eclipse.ui.internal.WorkbenchIntroManager.showIntro(WorkbenchIntroManager.java:136)
 at org.eclipse.ui.application.WorkbenchWindowAdvisor.openIntro(WorkbenchWindowAdvisor.java:173)
 at org.eclipse.ui.internal.ide.application.IDEWorkbenchWindowAdvisor.openIntro(IDEWorkbenchWindowAdvisor.java:458)
 at org.eclipse.ui.internal.WorkbenchWindow.open(WorkbenchWindow.java:777)
 at org.eclipse.ui.internal.Workbench$22.runWithException(Workbench.java:1041)
 at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
 at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
 at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
 at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3378)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3036)
 at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
 at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1361)
 at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
 at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
 at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
 at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3378)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3036)
 at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2293)
 at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
 at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
 at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
 at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
 at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
 at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:370)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
 at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
 at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
 at org.eclipse.equinox.launcher.Main.main(Main.java:1212)

我以为是我没装JRE,但是安装目录下有JRE,Zend应该是调用自带的。
Google之,有人说删除xulrunner,我这依赖xulrunner的软件太多,不可能删。

发现有人说是少了个参数,
-Dorg.eclipse.swt.browser.XULRunnerPath=
这个java系统参数应该指定一个目录,但是这里可以任意写或者空着。
在添加该行后,重新启动ZendStudio,然后就可以把该行删除,以后再启动都不会报错了。
同理,因为ZendStudio基于Eclipse,所以Eclipse也适用。

标签: , , ,

每周推特 2010-04-04

4 月 4th, 2010 | Posted by | Filed under 生活轨迹
  • Gentoo在X200的所有问题都解决了,内核驱动终于摸清楚了 #
  • 对运维的理解:预见风险,解决风险。 #
  • @asword2000 所以说遇见风险,然后规避风险。解决风险属于亡羊补牢,但也必须留这一手。 #
  • 对于NoSQL的狂热,自己做个东西强行用下NoSQL试试就知道了。并非任何场景都合适,简单数据结构,简单查询是可以的,但是想要分组、做一些聚合操作,需要安全的持久化策略,自己写代码实现吧,恐怕写的代码不比SQL数据库强。 #
  • 今天年会的照片会发出来不? #
  • 技吞山河,服甲天下。这也可以理解为一种做技术的胸襟。 #
  • 今天最大的收获是知道大牛们在做什么,怎么做。牛人不是用来模仿,但要学习。减少无意义的加班,把加班时间用到更有意义的事情上。 #
  • RT @yanzisky1989: 考完计算机= =貌似不难,希望能PASS {这全靠我灵魂附体} #
  • 排练时很不爽,感觉浪费时间,但是演完后又觉得有些空虚,有点习惯套个箱子一堆人一边排练一边扯淡,一边笑一边练。 #
  • RT @nzinfo: RT @hengdm: RT: 永远不要嫌弃父母学不会电脑,因为你不会知道在小的时候他们是如何不厌其烦地教你认字 #
  • 软件考古学,这个有意思 #
  • 团队里有几个技术狂人一起扯淡是非常幸运的事情 #
  • 如果一个软件的参数有最好的设置,那么这个设计本身就有问题,既然有适应任何场景的最佳设置,为什么还要把设置开放而不固化到程序内部。 #
  • 今天忙的天昏地暗,一点空闲时间都没有,都安排到通宵了…… #
  • 数据验证还没完,悲剧……先回家等待…… #
  • 终于搞完了,准备回家。查了银行卡,依然米有工资……继续接项目…… #
  • 累的没力气洗澡了,直接睡觉。 #
  • 被拉起来订正数据,开发人员的需求千奇百怪 #
  • 花费3天时间的迁移进入尾声,原本计划一晚完成的迁移,墨菲定理一次次验证,要相信RP是不可靠的 #
  • 迁移彻底完成。发现一个疑似MySQL的Bug,不影响应用,但是会错报复制延时,给mysql报告下这个Bug。 #
  • 总得来说,这次迁移收获很多,很难得的经验 #
  • @fire9 5.1.40,不过我觉得这可能不是一个版本的问题。如果两台库都开了log-slave-updates,一开始是M-S状态,然后切换为M-M状态,并且切的时候M没有停止服务,就可能带来误报复制延时。 in reply to fire9 #
  • @fire9 尽管从数据来看,近乎实时双向同步了,两边测试写也能相互复制,但是show slave status里面复制延时还是不断的增加。关掉其中一个log-slave-updates,或者先停止复制,重新change master,都可以修正。 in reply to fire9 #
  • SET GLOBAL sql_slave_skip_counter = N这个语句来跳过出错的复制,在迫不得已的情况下挺好用 #
  • 截止本周,我所担心的小概率问题悉数发生:慢查撑爆空间,双Master主键冲突,迁移过程VIP漂移。做技术的一定不能有侥幸心理,可能会发生的一定会发生……不要纠结于要不要考虑某些小概率风险,而是设计如何规避小概率风险,除非故障的后果真的不重要。 #
  • 背上算法导论,在公司写CodePK。 #
  • 模拟比了一下,感觉有信心了 #
  • 搞出了一次最好成绩,530,哈哈 #
  • 观望今晚的评分,分布式程序没写过,还是串行的,很吃亏。 #
  • code了两千多行才做完地图转换和最短路径的分布算法,分布式程序好难写啊…… #
  • 分组太点背,其他组前2名基本都是百分级的,我这组两个高手,都是千分级的,我Kao,逼我改程序了 #
  • 今天的时间完全花在调分布式接口了,目前依然跟接口对不上,总给我报Crash,一点点的注释程序,就剩个架子了,完全没有指针操作的存在,依然Crash,我已经无语了,这接口估计只有开发的人自己搞的清楚怎么调了。 #
  • 终于找到问题了,不支持memcpy #
  • 把程序串行化交了,看RP吧,至少一件T-shirt是有的 #
  • 真觉得分布式程序调试是真困难……提交上去才知道结果,每次都要等一阵 #
  • 比赛结束,最终搞了个搜索树,用A*启发搜索去搞了。如果平台继续开放的话,周末玩玩还是蛮好的,很多好策略来不及写进去,还有那调用Woker的接口,能不能多个点例子怎么调用,数据序列化各种问题。 #

Powered by Twitter Tools

标签: