PostgreSQL 删除所有函数
运行命令:
SELECT ns.nspname || '.' || proname || '(' || oidvectortypes(proargtypes) || ')'
FROM pg_proc INNER JOIN pg_namespace AS ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'public' ORDER BY proname;
运行命令:
SELECT ns.nspname || '.' || proname || '(' || oidvectortypes(proargtypes) || ')'
FROM pg_proc INNER JOIN pg_namespace AS ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'public' ORDER BY proname;
Btk 基于 Ruby GTK2 的扩展,大大方便ruby下的gui。
安装:gem install btk
主页:http://btk.rubyforge.org/
Hello World:
require 'rubygems'
require 'btk'
# w will call border_width= or set_border_width with parameter 10
Btk.Window :border_width=>10 do|w|
#alias of signal_connect('delete_event')
w.sig_delete_event do
puts "delete event occurred"
false
end
#alias of signal_connect('destroy')
w.sig_destroy do
puts "destroy event occurred"
Gtk.main_quit
end
# Button will add to w automatically
w.Button "Hello World" do|btn|
btn.sig_clicked do
puts "Hello World"
end
end
w.show_all
end
Gtk.main
MySQL的2个常用函数unix_timestamp()与from_unixtime PostgreSQL并不提供,但通过PostgreSQL强大的扩展性可以轻松的解决问题。
话说远在天边,尽在眼前,文档看仔细,问题迎仞解。PostgreSQL 题供extract与date_part取epoch即可
即
unix_timestamp() = round(date_part(‘epoch’,now()))
from_unixtime(int) = to_timestamp(int)
添加函数unix_timestamp()
CREATE FUNCTION unix_timestamp() RETURNS integer AS $$
SELECT (date_part(‘epoch’,now()))::integer;
$$ LANGUAGE SQL IMMUTABLE;
添加函数from_unixtime()
CREATE FUNCTION from_unixtime(int) RETURNS timestamp AS $$
SELECT to_timestamp($1)::timestamp;
$$ LANGUAGE SQL IMMUTABLE;
如数据库test拥有字段
banned boolean
使用命令
insert into test(banned) values (0)
返回为
ERROR: column “banned” is of type boolean but expression is of type integer
LINE 1: insert into test(banned) values(0)
很是不方便。用cast也没用
难到只能用规定的 TRUE,’t',’true’,'y’,'yes’,'1′吗?
但奇怪的是select 0::boolean支能显示false
使用 like 进行查询 如 explain select* from titles where title like ‘h%’ 一直显示 Seq Scan。 google+百度后,得知要设定locale为C才能使用like。
使用命令 initdb –local=C -D 集群路径 建立新的集群
目标:
当表alphas插入新行时,更新titles的alpha_at为NOW()
当表alphas删除行时,更新titles的alpha_at为NULL
1、安装plpgsql语言到数据库
createlang plpgsql DATABASE
2、建立一个返回为trigger的过程
CREATE OR REPLACE FUNCTION after_alphas_id() RETURNS trigger AS $BODY$
BEGIN
IF( TG_OP='DELETE' ) THEN
UPDATE titles SET alpha_at=null WHERE id=OLD.title_id;
ELSE
UPDATE titles SET alpha_at=NOW() WHERE id=NEW.title_id;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE 'plpgsql';
3、创建触发器
CREATE TRIGGER after_alphas_id AFTER INSERT OR DELETE ON alphas FOR EACH ROW EXECUTE PROCEDURE after_alphas_id();
从rails回来,重新用起了php,起因还是由于rails render一个63k的view要多花去10ms,这个view就一个erb fragment缓存,,即由原来每个响应20ms下降到30ms,降低了足足50%,很受伤,后然尝试使用merb,但merb不太习惯,正值ruby1.9.1,Rails2.3发页,又尝试ruby1.9.1,可惜很多gems都未能完善,fcgi,mongrel都无法工作,只能用回了1.8.7。最后无奈之下用回了php。用php重写了所有代码后,一模一样的操作那个63k的页面只需10ms。
但rails给我的启发是巨大的,现在我的目录结构也仿rails, 如app,config,public,log,tmp等。我甚至写了个Rakefile用来管理文件的常用操作,使用了ruby的2个月。学到了不少。ruby我还会继续用他,作为我的刀,希望ruby越来越好,早一天让我从php又回到了ruby。
今天发现stable version已从1.8.7升至为1.9.1-p0。一会测试一下兼容性和性能的提升。
相关链接
Ruby官方网站
–2009-02-10补充–
到正式可以用至少还要1个月,许许多多gems都还未能兼容1.9.1。部份版本已出了新版本,但都还在github中。
ruby的脚步太快, 追起来有点吃力,暂时驻足观望一阵。
用c++写ruby模块提升性能效果显著一文让我初尝甜头,但未免连render都用c++也太得不尝失。自从使用了rb_yield,一切问题迎刃而解。
如代码
class Test
def foo
yield
end
end
相对应的c++代码则为
#include "ruby.h"
typedef VALUE(*RUBY_FUNC)(...);
extern "C" VALUE t_foo(VALUE self)
{
//do something by c++
rb_yield();
//do something by c++
}
VALUE cTest = rb_define_class("Test",rb_cObject);
rb_define_method(cTest,"foo",(RUBY_FUNC)t_foo,1);
非常的方便有效。
早听说debian/ubuntu的1.8.6是debug模式,比正常的慢50%,一直没在意,反正是测试服务器不缺这点时间。
前几篇日志提到的600个节点的树递归生成时间与render耗时太长,要近200ms,c++render虽然快但不实用,于是今重写了扩展对erb进行yield,但最终只能优化到70ms(3ms树生成+70ms render),最后发现即使什么都不作进行600次link_to操作也要花掉60-80ms。随抱着试试的心态升到了1.8.7
升级后发现目录也改成像freebsd的/usr/local/…的样子不太熟悉。然后安装gem又折腾了一阵。最后怀着激动的心情安装好一试,!只要20-40ms!又试了试其它页面,原本要花0-6ms的页面全都稳定得变为0-1ms。太爽了!!!
边守岁边测试,看到这满意的结果,能安心的睡个好觉了。
越来越中意ruby了
最近评论