包含postgresql详解的词条

有没有人懂debian5下,jdbc和PostgreSQL的设置啊……

连接不上数据库的原因,无非是psql的安装和设置出现问题。

成都创新互联公司主要从事成都网站制作、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务于洪,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

查找相关答案的时候要注意,debian和ubuntu下面的安装和设置几乎是一样的。

请参考下面两个材料:

1、ubuntu下的Postgresql安装设置。

2、详解Ubuntu下搭建JSP平台过程,虽然这个文章是mysql,做为数据库的设置,还是大同小异的。

如何快速掌握 Navicat for PostgreSQL表索引

数据。下面Navicat官网将详解Navicat for PostgreSQL表索引。

方法/步骤

在 Navicat for PostgreSQL“索引”选项卡,只需点击索引栏位即可编辑。使用索引工具栏,便可以创建新的、编辑或删除选定的索引栏位。

● 添加索引:添加一个索引到表。

● 删除索引:删除已选择的索引。

2

名编辑框:设置索引名。没有模式名可以包含在这里,索引总是创建与它的上级表相同的模式。要在索引包含栏位,只需简单地双击栏位或点击“栏位”按钮就能在打开的编辑器中编辑。注意:一些栏位类型不容许由多个栏位索引。

索引方法:下拉列表定义表索引的类型。

3

唯一键:使得索引独一无二,当创建索引以及每次添加数据时,系统检查表中的重复值(如果数据已经存在)。

簇:CLUSTER 指示 PostgreSQL 簇,指定表名和索引名,索引必须已经被定义到表名。当一个表被簇,PostgreSQL 记得它被簇到哪个索引。 CLUSTER 形式表名重新簇表在它之前簇的相同索引。

表空间:创建索引的表空间。

4

限制:如果想创建部分索引,在编辑框输入限制条件。部分索引是一个索引包含项目给一个表的一部分,通常一部分在索引方面较表其余部分更为有用。

注释:定义索引的注释。

栏位编辑器:从名列表选择栏位,也可以使用箭头按钮来改变索引栏位的顺序。

5

排序规则:选择索引的排序规则。支持 PostgreSQL 9.1 或以上版本。

排序顺序:指定排序顺序:ASC 或 DESC。

Nulls 排序:指定 nulls 排序在 non-nulls 前(NULLS FIRST)或后(NULLS LAST)

Postgres-存储过程 return 详解

如果返回一个 数字或者字符 比较简单,那么多行多列怎么办呢,分为以下几种情况【东西很多,这里只做简单列举】

返回多行单列

又分为几种方式

1. return next,用在 for 循环中

CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOFvarcharas $$DECLARE    v_name varchar;BEGINforv_namein( (selectnamefromtest_result1whereid=in_id)union(selectnamefromtest_result2whereid= in_id) ) loop

RETURNNEXT v_name;

end loop;

return;END;

$$

LANGUAGE PLPGSQL;

注意

1. 循环外还有个 return

2. 需要实现声明 v_name

2. return query,无需 for 循环

CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOFvarcharas $$DECLARE    v_rec RECORD;BEGINreturnquery  ( (selectnamefromtest_result1whereid=in_id)union(selectnamefromtest_result2whereid= in_id) );

return;END;$$LANGUAGE PLPGSQL;

注意:如果 返回类型为 setof,最好用如下方法

RETURNQUERYEXECUTESQL

不要这么用

executesqlinto  out;returnout;

返回多行多列

也有多种方式

1. 使用 return next 和  setof record ,需要 for 循环

CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOF RECORDas $$DECLARE    v_rec RECORD; BEGINforv_recin( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) )loop

RETURNNEXT v_rec;

end loop;

return;END;

$$

LANGUAGE PLPGSQL;

注意

1. 读取表的整行数据时才能用 record

2. 如果读取的数据不是整行,需要自定义 复合数据类型,否则会报如下错误

ERROR:  acolumndefinition listisrequiredforfunctions returning "record"

定义复合类型 ,示例如下

createtype myout2as (

road_num int,

freq bigint);createorreplacefunctiontest(cartext, time1text, time2text)returnssetof myout2as $$declare

array1 text[];

array2 text[];

len1 integer;

len2 integer;

x integer;

y integer;

road_str text;

car_str text;

sql text;

i myout2;

begin-- vin 号拼接selectregexp_split_to_array(car,',')into array2;

selectarray_length(array2,1)into len2;

car_str :='';

y :=1;

whiley= len2 loop

car_str :=car_str||quote_literal(array2[y])||',';

y :=y+1;

end loop;

-- sql 拼接sql :='select road_number, sum(frequency) from heat_map where date_key = '''|| time1

||'-01'' and date_key ='''|| time2

||'-20'' and vin in ('||rtrim(car_str,',')

||')group by road_number;';

--execute sql into out;foriinexecute sql loop

returnnext i;

end loop;

return;end$$ language plpgsql;

在执行时可能会报如下错误

ERROR:set-valuedfunctioncalledincontext that cannot accept aset

解决方法

select funcname(arg);--改为select*fromfuncname(arg);

2.  return query,无需 for 循环

CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOF RECORDas $$DECLARE    v_rec RECORD;BEGINreturnquery  ( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) );

return;END;

$$

LANGUAGE PLPGSQL;

3. 使用 out 输出参数

CREATEORREPLACEFUNCTIONfuncname ( in_idinteger,out o_idinteger,out o_namevarchar)

RETURNSSETOF RECORDas $$DECLARE    v_rec RECORD;BEGINforv_recin( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) )loop

o_id  := v_rec.id;

o_name := v_rec.name;

RETURNNEXT ;

end loop;

return;END;

$$

LANGUAGE PLPGSQL;

总结 - return next return query 

我们可以看到上面无论是单列多行还是多列多行,都用到了 return next 和 return query 方法

在 plpgsql 中,如果存储过程返回 setof sometype,则返回值必须在 return next 或者 return query 中声明,然后有一个不带参数的 retrun 命令,告诉函数执行完毕;【setof 就意味着 多行】

用法如下

RETURNNEXT expression;RETURN QUERY query;RETURNQUERYEXECUTEcommand-string[ USING expression [, ... ]];

return next 可以用于标量和复合类型数据;

return query 命令将查询到的一条结果追加到函数的结果集中;

二者在单一集合返回函数中自由混合,在这种情况下,结果将被级联。【有待研究】

return query execute 是 return query 的变形,它指定 sql 将被动态执行;

returnqueryselectroad_number,sum(frequency)fromheat_mapgroupbyroad_number;--这样可以sql :='select road_number, sum(frequency) from heat_map group by road_number';returnquery sql;--这样不行

参考资料:

自定义类型并返回数组

return next return query

function返回多列多行

返回结果集多列和单列的例子  

PostgreSQL存储过程(1)-基于SQL的存储过程

动态SQL

postgresql, pgadmin error RETURN cannot have a parameter in function returning set

存储过程输出参数

PostgreSQL存储过程(3)-流程控制语句

CentOS 7 安装&配置PostgreSQL 12(附图片详解)

启动pg服务

设置pg服务为开机启动

-bash: netstat: 未找到命令

再次执行

使用navicat连接是无法连接的。

【遇到的问题】若没有可以跳过

【解决办法】

修改/usr/bin/firewall-cmd 下文件在首行 python改为python2(因为之前安装过python3环境)

listen_addresses='*'

或者加 ip网段

配置完成后即可使用客户端进行连接

大功告成~~

————————————————

参考 链接:


当前名称:包含postgresql详解的词条
文章路径:http://scyanting.com/article/dsdhepg.html