当前位置:首页 » 编程语言 » postgresqlsqlif

postgresqlsqlif

发布时间: 2023-07-03 11:46:26

㈠ postgresql怎么写脚本

主要就是把除了template0和template1外的数据库全部mp到指定目录并打包
使用前把BACKUPDIR修改至你自己的备份目录
一般来说你不用修改DUMPCMD,除非你的PostgreSQL安装时的prefix指定到了其他地方,又或者你想加上其他的pg_mp参数
可以放在crontab里每天定时执行
可以考虑root来执行,因为一般root可以不通过密码验证直接使用数据库pgsql用户mp数据,一切都取决于你的pg_hba.conf和postgresql.conf设置,碰到问题自行判断
想在Windows上运行需要自行稍微修改

#! /bin/sh

DATE=`date +%Y%m%d%H`
BACKUPDIR=/path/to/backup
DUMPCMD='/usr/local/bin/pg_mp -U pgsql -O -x'

if [ ! -d $BACKUPDIR ]; then
mkdir $BACKUPDIR
fi

for DB in `/usr/local/bin/psql -U pgsql -d template1 -c '\l' -q -t | /usr/bin/awk '{print $1}'`
do
FILENAME=${DATE}_${DB}
if [ $DB != 'template0' ] && [ $DB != 'template1' ]; then
echo "Backup $DB ..."
$DUMPCMD -f $BACKUPDIR/$FILENAME.sql $DB
/usr/bin/tar -C $BACKUPDIR -c -j -f $BACKUPDIR/$FILENAME.tar.bz2 $FILENAME.sql \
&& rm -f $BACKUPDIR/$FILENAME.sql
fi
done
sync

㈡ 怎么查看 PostgreSQL里的数据库的表是否存在

往表里更凯闷新数据前先查询一遍被更新的数据存不存在。
通常做法是使用select 查询过滤一遍,然后再决定是否更新,怎么更盯兆弯新。
在PG库里,除了以上方法外,还有一种更能提升性能的办法,
使用perform来代替select。
Example:
Create or replace function test.insert_exist_test(i_id int,i_info text)
returns void
as
$BODY$
--author: kenyon
--created:2012_03_05
--purpose:test insert into a table if exists
declare
begin perform 1 from test.exists_test where id = i_id;
if not found then
insert into test.exists_test(id,info) values (i_id,i_info);
return;
else
update test.exists_test set info=i_info where id=i_id;
return;
end if;
exception when others then
raise exception 'Insert exists_test(id,info) values(%,%) error.',i_id,i_info;
return;
end;
$BODY$
language plpgsql;
使用:

select test.insert_exist_test(1,'kevin');
select test.insert_exist_test(2,'BruceLee');
select test.insert_exist_test(3,'Jacky');
select test.insert_exist_test(1,'猜野kenyon');

㈢ go语言postgresql数据库驱动怎么用

PostgreSQL和MySQL比较,它更加庞大一点,因为它是用来替代Oracle而设计的。所以在企业应用中采用PostgreSQL是一个明智的选择。

现在MySQL被Oracle收购之后,有传闻Oracle正在逐步的封闭MySQL,,鉴于此,将来我们也许会选择PostgreSQL而不是MySQL作为项目的后端数据库。

1、驱动
Go实现的支持PostgreSQL的驱动也很多,因为国外很多人在开发中使用了这个数据库。

https://github.com/bmizerany/pq 支持database/sql驱动,纯Go写的
https://github.com/jbarham/gopgsqldriver 支持database/sql驱动,纯Go写的
https://github.com/lxn/go-pgsql 支持database/sql驱动,纯Go写的
在下面的示例中我采用了第一个驱动,因为它目前使用的人最多,在github上也比较活跃。

2、实例代码
数据库建表语句:

复制代码
CREATE TABLE userinfo
(
uid serial NOT NULL,
username character varying(100) NOT NULL,
departname character varying(500) NOT NULL,
Created date,
CONSTRAINT userinfo_pkey PRIMARY KEY (uid)
)
WITH (OIDS=FALSE);

CREATE TABLE userdeatail
(
uid integer,
intro character varying(100),
profile character varying(100)
)
WITH(OIDS=FALSE);
复制代码

看下面这个Go如何操作数据库表数据:增删改查

复制代码
package main

import (
"database/sql"
"fmt"
_ "github.com/bmizerany/pq"
)

func main() {
db, err := sql.Open("postgres", "user=astaxie password=astaxie dbname=test sslmode=disable")
checkErr(err)

//插入数据
stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
checkErr(err)

res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")
checkErr(err)

//pg不支持这个函数,因为他没有类似MySQL的自增ID
id, err := res.LastInsertId()
checkErr(err)

fmt.Println(id)

//更新数据
stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")
checkErr(err)

res, err = stmt.Exec("astaxieupdate", 1)
checkErr(err)

affect, err := res.RowsAffected()
checkErr(err)

fmt.Println(affect)

//查询数据
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)

for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid)
fmt.Println(username)
fmt.Println(department)
fmt.Println(created)
}

//删除数据
stmt, err = db.Prepare("delete from userinfo where uid=$1")
checkErr(err)

res, err = stmt.Exec(1)
checkErr(err)

affect, err = res.RowsAffected()
checkErr(err)

fmt.Println(affect)

db.Close()

}

func checkErr(err error) {
if err != nil {
panic(err)
}
}
复制代码

从上面的代码我们可以看到,PostgreSQL是通过$1,$2这种方式来指定要传递的参数,而不是MySQL中的?,另外在sql.Open中的dsn信息的格式也与MySQL的驱动中的dsn格式不一样,所以在使用时请注意它们的差异。

还有pg不支持LastInsertId函数,因为PostgreSQL内部没有实现类似MySQL的自增ID返回,其他的代码几乎是一模一样

㈣ postgresql存储过程 怎么实现无返回值

PostgreSQL 存储过程定义格式如下:
■结构 PL/pgSQL是一种块结构的语言,比较方便的是用pgAdmin III新建Function,填入一些参数就可以了。
基本上是这样的:
CREATE OR REPLACE FUNCTION 函数名(参数1,[整型 int4, 整型数组 _int4, ...]) RETURNS 返回值类型 AS $BODY$ DECLARE 变量声明 BEGIN 函数体 END; $BODY$ LANGUAGE ‘plpgsql’ VOLATILE;
■变量类型 除了postgresql内置的变量类型外,常用的还有 RECORD ,表示一条记录。
■赋值 赋值和Pascal有点像:“变量 := 表达式;” 有些奇怪的是连接字符串的是“||”,比如 sql := ‘SELECT * FROM’ || table || ‘WHERE …’;
■判断 判断又和VB有些像: IF 条件 THEN … ELSEIF 条件 THEN … ELSE … END IF;
■循环 循环有好几种写法: WHILE expression LOOP statements END LOOP; 还有常用的一种是:(从1循环到9可以写成FOR i IN 1..9 LOOP) FOR name IN [ REVERSE ] expression .. expression LOOP statements END LOOP;
■其他 还有几个常用的函数: SELECT INTO record …; 表示将select的结果赋给record变量(RECORD类型) PERFORM query; 表示执行query并丢弃结果 EXECUTE sql; 表示执行sql语句,这条可以动态执行sql语句(特别是由参数传入构造sql语句的时候特别有用)
--简单的例子:
例1:无返回值
CREATE OR REPLACE FUNCTION 函数名称( 参数1,参数2,...)
AS
$BODY$
DECLARE --定义
BEGIN
INSERT INTO "表名" VALUES(参数1,参数2,...);
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE; -- 最后别忘了这个。
例2:有返回值
CREATE OR REPLACE FUNCTION 函数名称(deptcode VARCHAR(20) ,deptname VARCHAR(60) ,pycode VARCHAR(60),isenabled CHAR(1))
RETURNS BOOLEAN --返回值,布尔类型
AS
$body$
DECLARE
deptcode VARCHAR(20);
deptname VARCHAR(60);
pycode VARCHAR(60);
isenabled CHAR(1);
BEGIN
UPDATE "deptDict" SET deptcode=deptcode,deptname=deptname,pycode=pycode,isenabled=isenabled,updatedhisdatetime=CURRENT_TIMESTAMP
WHERE deptcode=deptcode;
RETURN TRUE;
END
$body$
LANGUAGE 'plpgsql' VOLATILE;
最后再加上如何执行这个存储过程(函数)
-- 执行存储过程方法1
SELECT * FROM 函数名称(参数1,参数2,...)
-- 执行存储过程方法2
SELECT 函数名称('0参数1,参数2,...)

㈤ postgresql中使用if else语句

1、首先在postgresql数据库中复制表的时候,必须先建立表结构,然后通过insert into语句来实现。

热点内容
破解访问权限 发布:2025-02-10 07:17:24 浏览:663
庆余年密码多少 发布:2025-02-10 07:16:38 浏览:201
ftp包括有哪两个连接 发布:2025-02-10 07:11:50 浏览:423
压缩模量es 发布:2025-02-10 07:11:47 浏览:115
鸡尾酒配置酒什么意思 发布:2025-02-10 07:01:34 浏览:139
c语言的架构设计 发布:2025-02-10 06:59:59 浏览:747
柯南可以缓存 发布:2025-02-10 06:59:52 浏览:422
电脑做安卓系统哪个好用 发布:2025-02-10 06:27:44 浏览:372
linux转换字符集 发布:2025-02-10 06:20:05 浏览:483
网站的服务器ip有什么用 发布:2025-02-10 06:15:53 浏览:701