存档

‘PostgreSQL’ 分类的存档

PostgreSQL 删除所有函数

2009年12月19日 没有评论

运行命令:

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;
可以得到所有函数列表
再依次执行DROP FUNCTION 即可。
分类: PostgreSQL, 编程 标签:

给PostgreSQL添加MySQL的unix_timestamp与from_unixtime函数

2009年7月6日 没有评论

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;

分类: PostgreSQL 标签:

很麻烦,PostgreSQL不支持integer到boolean的转换

2009年4月5日 没有评论

如数据库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

分类: PostgreSQL 标签:

PostgreSQL like无法使用索引

2009年4月2日 没有评论

使用 like 进行查询 如 explain select* from titles where title like ‘h%’  一直显示 Seq Scan。 google+百度后,得知要设定locale为C才能使用like。

使用命令 initdb –local=C -D 集群路径 建立新的集群

分类: PostgreSQL 标签:

PostgreSQL 触发器(Trigger) 使用

2009年4月1日 没有评论

目标:
当表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();
分类: PostgreSQL 标签: