Questions in category: PostgreSQL (PostgreSQL)
软件 >> PostgreSQL
<[1] [2] >

1. 更改表 categories 中 link 属性的默认值

Posted by haifeng on 2015-08-27 15:40:50 last update 2015-08-27 18:26:20 | Answers (0) | 收藏


首先登陆 notes 数据库

su - postgres
psql -d notes

我们要更改 categories 中 link 的默认值

首先查看表 categories 的结构

\d categories

发现 link 的Default 值为字符串
http://noooin.com/notes/admin/do/listqsbyctgry.php?cid=

我们需要将之改为

http://www.noooin.com/notes/admin/do/listqsbyctgry.php?cid=

在 Postgres 命令行界面输入
ALTER TABLE categories ALTER COLUMN link SET DEFAULT 'http://www.noooin.com/notes/admin/do/listqsbyctgry.php?cid=';

然后还得将现有的记录中 link 属性中的值改成所需要的.

 

参见 PostgreSQL 替换字符串方法及字符串操作函数

http://www.jsjtt.com/shujuku/postgresql/29.html

2. [Postgres] 删除函数

Posted by haifeng on 2015-05-23 22:56:25 last update 2015-05-23 22:56:25 | Answers (0) | 收藏


在 PostgreSQL 中, 删除函数必须将其签名完全给出. 例如

DROP FUNCTION transfer(varchar,varchar,integer);

3. 更改 PostgreSql 数据库中某个表的时间属性并设置默认值

Posted by haifeng on 2015-05-11 20:46:46 last update 2015-05-12 15:35:41 | Answers (0) | 收藏



ALTER TABLE questions ALTER COLUMN postDate TYPE timestamp(0) without time zone ;

ALTER TABLE questions ALTER COLUMN postDate SET DEFAULT current_timestamp ;

4. PostgreSQL 中修改触发器

Posted by haifeng on 2015-04-22 20:15:20 last update 2015-04-22 20:47:28 | Answers (0) | 收藏


假设有一个触发器已经存在于数据库中, 现在要更改其所调用的函数, 我们可以使用 CREATE OR REPLACE FUNCTION

来替换触发器所使用的函数.

Postgres 将在某个 transaction 中执行所有的 REPLACE FUNCTION, 从而所有的表是被锁定的.

 

 

当然还有一种办法, 也是最粗暴的, 就是先删除要修改的触发器及所使用的函数,

notes=# DROP TRIGGER triggerName ON table;

DROP TRIGGER
notes=# DROP FUNCTION functionName();

然后再重写相应的函数和触发器.

 

5. PostgreSQL 中创建用户

Posted by haifeng on 2015-02-02 15:56:05 last update 2015-03-09 23:10:31 | Answers (0) | 收藏


root@ThinkPad:~# su - postgres

postgres@ThinkPad:/$ which createuser
/usr/bin/createuser

postgres@ThinkPad:/$ createuser UserName
Shall the new role be a superuser? (y/n) y

=#

建立数据库 dbname

 

psql

postgres=# 

 

另外, 为安全起见, 建立普通用户 haifeng, 密码为 Passwd, 但不能创建数据库.

postgres=# create user "haifeng" with password 'Passwd' nocreatedb;

利用管理员 postgres 为用户 haifeng 创建数据库 dbname

createdb DATABASE "dbname" with owner="haifeng";

(上面一行中 createdb 应改为 create)

使用用户名 haifeng 登录数据库 dbname,

root@ThinkPad:~# psql -h 127.0.0.1 -U haifeng -d dbname
Password for user haifeng: (输入密码Passwd)

从sql文件导入到数据库

/usr/local/pgsql/bin/psql -h localhost -U haifeng -d dbname -f  /tmp/dbname.sql


备注:

如果将 create 和 database 放在一行上输入会有问题

create

database

会有问题

6. PostgreSQL 中如何备份数据库

Posted by haifeng on 2015-02-02 15:33:44 last update 2015-02-02 15:33:44 | Answers (0) | 收藏


PostgreSQL 提供了其自己的备份还原机制:

pg_dump, pg_dumpall, 和 pg_restore.

此外, 也可以在 pgAdmin III 中直接备份.

7. 触发器何时会出现死循环

Posted by haifeng on 2015-02-01 22:32:35 last update 2015-02-01 22:32:35 | Answers (0) | 收藏


当事件是 UPDATE, 而所做处理也是针对同一对象采取 UPDATE 的时候, 就会出现死循环.

一般会提示: ERROR:  stack depth limit exceeded

 

8. PostgreSQL 中视图的创建删除

Posted by haifeng on 2014-12-21 12:02:52 last update 2014-12-21 12:02:52 | Answers (0) | 收藏


PostgreSQL 9.3 内建了物化视图

如果安装的 PostgreSQL 9.1, 则一般只能建立虚拟视图

 

CREATE [TEMP | TEMPORARY] VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition]; 

References:

http://www.yiibai.com/postgresql/2013080777.html

9. [Pg]查看触发器

Posted by haifeng on 2014-11-05 21:57:46 last update 2014-11-05 22:32:04 | Answers (0) | 收藏


dbname=# select * from pg_trigger;

dbname=# \d pg_trigger;

dbname=# select tgrelid, tgname from pg_trigger;

<[1] [2] >