摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-structure.html39.2. PL/pgSQL 的结构PL/pgSQL是一种块式结构的语言。完整的函数定义必须是一个块。一个块的定义形式如下:[ > ][ DECLARE declarations ]BEGIN statementsEND [ label ];在块中,每一个声明或语句都以分号结束。一个块出现在另外一个块中的时候,必须接 END;形式,如上图所示。但是包含函数体的最后一个END后,可以不接分号。注意:在BEGIN后不要接分号。当你需要在EXIT语句中使用一个块... 阅读全文
posted @ 2013-07-09 15:29
健哥的数据花园
阅读(2813)
评论(0)
推荐(0)
摘要:
pgsql=# -- Multiline commentspgsql=# SELECT 'Multi' /* This comment extends acrosspgsql*# * numberous lines, and can bepgsql*# * /*nested safely */ pgsql*# Can you understand pgsql*# * Now the end*/pgsql-# || '-test' AS exa... 阅读全文
posted @ 2013-07-09 15:06
健哥的数据花园
阅读(1563)
评论(0)
推荐(0)
摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html39.1.2. Supported Argument and Result Data Types用PL/pgSQL写的函数可以接受标量类型或者服务器支持的数组类型作为参数,它们可以返回前述的数据类型的结果。它们也能接受或返回通过名称指定的复杂类型(rwo type)。也可以声明一个PL/pgSQL函数返回 record类型,此时返回的结果是一个row type,它的列由调用它的查询所定义。PL/pgSQL 函数也可以被声明为返回一个任意数据类型的”集合“(或者表)。这样 阅读全文
posted @ 2013-07-09 14:45
健哥的数据花园
阅读(533)
评论(0)
推荐(0)
摘要:
我的例子:数据准备:create table custinfo(custid integer,callingcnt integer);insert into custoinfo valuse(1,10),(2,6),(3,8);函数生成:CREATE OR REPLACE FUNCTION get_callingcnt(custid int) RETURNS TABLE ( custid int ,callingcnt int ) AS$$BEGIN RETURN QUERY SELECT t.custid ,t.callingcnt FROM ... 阅读全文
posted @ 2013-07-09 14:41
健哥的数据花园
阅读(1359)
评论(0)
推荐(0)
摘要:
从网上找到例子:可以说,RETURN NEXT要用在循环中:例子一:数据准备:CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT);INSERT INTO foo VALUES (1, 2, 'three');INSERT INTO foo VALUES (4, 5, 'six');生成函数:CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS$BODY$DECLARE r foo%rowtype;BEGIN FOR r IN SELEC 阅读全文
posted @ 2013-07-09 14:05
健哥的数据花园
阅读(1895)
评论(0)
推荐(0)
摘要:
39.1.1 使用 PL/pgSQL的好处SQL是 PostgreSQL和其他大多数关系型数据库作为查询语言而使用的语言。它可移植,并容易学习。但是SQL语句必须被数据库服务器逐条地执行。这意味着你的客户应用必须向数据库发送每一条查询,等待它被处理,接收并处理结果,进行一些计算,然后再依次类推送出更多的查询。所有这些导致进程间通信,如果你的客户程序和数据库服务器位于不同的机器上,网络负载也会大量增加。使用 PL/pgSQL, 你可以把一个计算块和一系列的数据库服务器内部的查询组合到一起,这样保持了过程语言的威力,也发挥了SQL容易使用的特点,并节省了客户端与服务器间的通信量。客户端和服务器端的 阅读全文
posted @ 2013-07-09 13:14
健哥的数据花园
阅读(492)
评论(0)
推荐(0)
摘要:
开始资料来源:http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html39.1 概要:PL/pgSQL是一种可载入的过程语言,它的设计目标:可以用来创建函数和触发器过程,给SQL语言提供控制结构,能够完成复杂计算,能继承所有用户定义的类型、函数和操作符,定义为被服务器所信任,易于使用。使用PL/pgSQL创建的话函数可以像内置的函数一样被使用。例如,可以创建一个复杂的条件计算函数,而后在索引表达式中使用它,或者用其来定义操作符。在PostgreSQL 9.0及以后的版本,PL/pgSQL已经被缺省安装。但是它仍然是一个可载入 阅读全文
posted @ 2013-07-09 13:01
健哥的数据花园
阅读(582)
评论(0)
推荐(0)
摘要:
继续分析: make_postgres();展开:目的是创建postgres数据库。cmd是:/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/null/* * copy template1 to postgres */static voidmake_postgres(void){ PG_CMD_DECL; const char **line; static const char *postgre... 阅读全文
posted @ 2013-07-09 10:33
健哥的数据花园
阅读(460)
评论(0)
推荐(0)
摘要:
继续分析: make_template0();展开:无需再作解释,就是创建template0数据库/* * copy template1 to template0 */static voidmake_template0(void){ PG_CMD_DECL; const char **line; static const char *template0_setup[] = { "CREATE DATABASE template0;\n", "UPDATE pg_database SET " " datistemplate ... 阅读全文
posted @ 2013-07-09 10:26
健哥的数据花园
阅读(383)
评论(0)
推荐(0)
摘要:
继续分析: vacuum_db();展开:cmd是:/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/null其目的很明确,就是 对 template1 数据库执行ANALYZE;VACUUM FULL;VACUUM FREEZE;/* * clean everything up in template1 */static voidvacuum_db(void){ PG_CMD_DECL; fputs(. 阅读全文
posted @ 2013-07-09 10:21
健哥的数据花园
阅读(336)
评论(0)
推荐(0)
摘要:
继续分析 load_plpgsql();展开:就是让postgres 执行 create extension plpgsqlcmd是:"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/nullok/* * load PL/pgsql server-side language */static voidload_plpgsql(void){ PG_CMD_DECL; fputs(_(" 阅读全文
posted @ 2013-07-09 10:12
健哥的数据花园
阅读(427)
评论(0)
推荐(0)
摘要:
继续分析: setup_schema();展开:实质就是创建info_schema。cmd 是:"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true -j template1 >/dev/null infor_schem_file是:/home/pgsql/project/share/information_schema.sql/* * load info schema and populate from features fi 阅读全文
posted @ 2013-07-09 10:05
健哥的数据花园
阅读(303)
评论(0)
推荐(0)
摘要:
继续分析: setup_privileges();展开:这是设置权限。其cmd是:"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/null其命令是:UPDATE pg_class SET relacl = E'{"=r/\\"$POSTGRES_SUPERUSERNAME\\""}' WHERE relkind IN ('r 阅读全文
posted @ 2013-07-09 09:58
健哥的数据花园
阅读(448)
评论(0)
推荐(0)
摘要:
继续分析: setup_dictionary();展开:其中:cmd 是:"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true -j template1 >/dev/nulldictionary_file 是:/home/pgsql/project/share/snowball_create.sql/* * load extra dictionaries (Snowball stemmers) */static voidsetu 阅读全文
posted @ 2013-07-09 09:36
健哥的数据花园
阅读(346)
评论(0)
推荐(0)
摘要:
继续分析: setup_conversion();展开:其实质是:运行命令:"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/null传递参数:/home/pgsql/project/share/conversion_create.sql/* * load conversion functions */static voidsetup_conversion(void){ PG_CMD_DECL 阅读全文
posted @ 2013-07-09 09:19
健哥的数据花园
阅读(347)
评论(0)
推荐(0)
摘要:
继续分析: setup_collation()展开:/* * populate pg_collation */static voidsetup_collation(void){#if defined(HAVE_LOCALE_T) && !defined(WIN32) int i; FILE *locale_a_handle; char localebuf[NAMEDATALEN]; int count = 0; PG_CMD_DECL;#endif fputs(_("creating... 阅读全文
posted @ 2013-07-09 08:54
健哥的数据花园
阅读(576)
评论(0)
推荐(0)
摘要:
继续分析 setup_description();展开后:就是要把share/postgres.description 文件的内容读入到 pg_description 和 pg_shdescription/* * load description data */static voidsetup_description(void){ PG_CMD_DECL; fputs(_("loading system objects' descriptions ... "), stdout); fflush(stdout); snprintf(cmd, sizeof(cmd),. 阅读全文
posted @ 2013-07-09 08:42
健哥的数据花园
阅读(487)
评论(0)
推荐(0)

浙公网安备 33010602011771号