![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PostgreSQL
奋斗鱼
一个人如果没有梦想,那跟咸鱼有什么区别
展开
-
pgsql:简单存储过程使用while循环并打印出结果
MSSQL中有print命令可以在执行过程中打印出结果,而pgsql可以使用raise notice 来实现相同的打印结果。原创 2023-04-05 10:21:36 · 3705 阅读 · 1 评论 -
pgsql:字符串转数值
查询语句中可以使用to_number转换为数值类型。调用to_char(int, text)函数,int为要转换值,text为数值格式化模式。将数值转成字符串且不要前面的空格实现起来很麻烦,由于无法判断 格式化模式中9的位数。可用下面通过||连接解决。将字符串转成数值方法调用: to_number(text,text )函数,参数1是要转的数字字符串,参数2为模式参数,返回的类型 numeric 。原创 2021-09-26 17:12:20 · 28211 阅读 · 1 评论 -
pgsql:纵列字段转为横列字段
将查询出来的数据纵列字段转为横列字段原创 2023-06-28 20:27:47 · 1603 阅读 · 0 评论 -
pgsql:锁定表,禁止增删改操作
有时我们想对某个表进行锁定,禁止该表的所有数据被任何改动。解决方案可以使用pgsql表的规则进行设置。以下为示例。原创 2022-11-26 11:14:03 · 1846 阅读 · 0 评论 -
pgsql:检查数据表的死锁和解除死锁的方法
- 358009为上述查询到表t_mytab的oid。-- t_mytab为你觉得可能死锁的表名。若查询到的Pid记录很多,则你可能需要批量执行。-- 8954为pid。在业务执行过程中,可能因为并发多表操作,引起资源抢占导致数据表被死锁,引起整个系统奔溃。--如果上面检测查询到了pid结果,则说明该表可能被锁,需要执行释放锁定指令。-- 以下358009为步骤1中查询到的死锁表的oid。-- 根据oid查询该表正在被执行的进程 pid。--查询指定表的oid。原创 2022-09-29 19:20:05 · 8133 阅读 · 1 评论 -
pgsql:navicat配置数据库账号访问权限
新建一个账号,指定其中某个视图或实体表,开放给该账号访问。1.新建账号在角色-》新建角色页面,创建角色名比如ycweb,勾选“可以登录”,设置登录密码。2.设置账号访问权限在角色-》权限管理员页面,添加权限,左边勾选ycweb,右边勾选usage的授予,保存。3.设置视图或实体表权限左边的Public中选中想要开放权限的视图,点击“添加权限”,在左边勾选ycweb(截图是已经保存过所以显示灰色),右边勾选“select”,开放了查询权限。保存。4.测试原创 2022-05-17 20:00:08 · 5160 阅读 · 0 评论 -
pgsql:odbc连接设置
pgsql使用odbc工具连接时,需要安装pgsql-odbc工具包。1.选择数据库驱动安装完后,在控制面板找到并打开odbc数据源,选择pgsql对应的驱动2.设置对应的数据信息主要为database数据库名,server 数据库IP,port据库端口,username 数据库账号和密码,点击test测试连接成功。3.问题正常连接本地数据库127.0.0.1是正常。但如果出现“no pg_hba.conf ****”的提示,则是因为你是连接远程数据库,pgsql默认只允原创 2022-05-17 16:31:56 · 2008 阅读 · 0 评论 -
pgsql:存储过程简单示例
以下介绍在navicat中如何创建pgsql的存储过程一、创建在左边菜单的函数-》新建函数,输入存储过程名字,会自动生成存储过程模板代码此时直接保存,并点击运行,可以看到存储过程可以正常执行,不过此时我们没有写任何执行内容,定义的输出类型是void,所以输出结果也是空的。执行结果:二、执行具体操作语句以上语句保存后重新打开设计函数时,会自动重构语句,设计工具会自动添加一些语句比如COST 100,不影响我们的原执行语句。以下添加入参和update语句,并把返回值修改为原创 2022-05-03 13:18:03 · 11747 阅读 · 0 评论 -
pgsql在Mybatis中获取新增记录自增后的id
Mybatis pgsql在Mybatis中获取新增记录自增后的id1.Mybatis中的写法 <!-- 添加信息 --> <insert id="add" parameterType="java.util.HashMap"> <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="fid"> SELECT currval('t_pay_cancel_fid_seq'::r原创 2022-04-25 00:41:48 · 1630 阅读 · 1 评论 -
pgsql:获取分组中最大或最小的一条数据
步骤1:查询并排序各分组的记录sql的查询语句如下:SELECT tb.curr_read,tb.arch_id, ROW_NUMBER() OVER(PARTITION by arch_id ORDER BY year_month desc)idx FROM t_month_cdate tbWHERE tb.year_month BETWEEN '2021-01' and '2021-05' and arch_id in('00004','00005','00006')原创 2022-02-16 16:58:57 · 15475 阅读 · 0 评论 -
pgsql:DDL基本操作语句
1.添加字段alter table t_user_arch ADD column arch_no_old varchar(30)NOT NULL DEFAULT '';2.删除字段alter table t_user_arch DROP column meter_class_amount;3.原创 2021-11-22 19:26:56 · 1333 阅读 · 0 评论 -
pgsql:常用函数语句
1.字段与字符串合并SELECT ('dep'||id) from tableA原创 2021-11-17 17:10:33 · 401 阅读 · 0 评论 -
pgsql:跨库访问其他数据库
在mssql或mysql中,跨库访问其他数据库是很简单的。用 [数据库名].[表名]即可访问。但在pgsql中跨库访问就稍微麻烦一些,需要做一些前期准备。以下使用了自带的扩展插件postgres_fdw来创建跨库链接。-- 开启扩展插件CREATE EXTENSION postgres_fdw;-- 创建外部服务器 映射远程数据库IP 端口 数据库名CREATE SERVER foreign_serverFOREIGN DATA WRAPPER postgres_fdwOPTION原创 2021-11-02 15:56:20 · 7607 阅读 · 1 评论 -
SqlServer数据迁移Pgsql方案
将SqlServer数据库迁移到pgsql,分别尝试了以下几种方案。(最终用方法四解决)方法一:Sqlserver链接服务器(不支持大数据迁移)通过在Sqlserver中创建链接服务器,直接链接到pgsql。然后在查询分析器中通过[链接服务器].[数据库名].[表名]的方式读写pgsql的数据表。此方式简单方便,在sqlserver中将查询的数据直接写入到pgsql数据表,能达到迁移数据的目的。问题:只能导入少量数据(几千条),导入大几万条数到pgsql库时会出现“管道结束”的报错,链接服务原创 2021-11-02 15:56:51 · 4028 阅读 · 0 评论 -
Nacivat导入Access数据库时cannot initialize database问题解决
问题想使用Nacivat将Access数据库导入到pgsql,在选择Access数据库的mdb文件时提示“cannot initialize database”解决方案需要安装AccessDatabaseEngine_X64下载地址:https://download.csdn.net/download/quan278905570/36466612安装后重新再试正常了。...原创 2021-11-02 15:22:18 · 3511 阅读 · 0 评论 -
SQLServer连接Pgsql或mysql读写数据
问题想把SQLServer的数据库迁移到PgSql里面,因为两个数据库业务表的结构和字段都不一样,需要逐表进行按需抽取想要的字段并导入数据。解决方案可以在SqlServer里面创建链接服务器,链接到Pgsql的表,然后在SQLServer中把数据写入到Pgsql数据库。(SqlServer链接Mysql也是一样的方法)。步骤1:创建ODBC数据源在开始菜单中输入ODBC,找到ODBC64位数据源(我的是64位系统,如果后续链接服务器连接时提示架构不匹配,就要用ODBC32位来创建)。原创 2021-10-30 15:30:10 · 2166 阅读 · 0 评论 -
pgsql:提示“server closed the connection“,日志显示连接数过多,对不起已经有太多的用户
问题pgsql运行一段时间后就无法查询使用,提示"server closed the connection"。打开PostgreSQL\10\data\log目录下的日志文件,看到提示日志内容提示“对不起, 已经有太多的客户”。解决方案pgsql默认的连接数是100,可以将连接数设置大一些。查询当前连接数:select count(1) from pg_stat_activity;查询最大连接数show max_connections;在PostgreSQL.原创 2021-10-26 19:22:30 · 10279 阅读 · 1 评论 -
pgsql:关联查询union(并集)、except(差集)、intersect(交集)
联合查询的规则是:字段的个数和顺序必须相同查询中的相应字段必须具有兼容的数据类型要对合并后的结果集进行排序,可以在最后一个查询后面加上 order by 只在最后一个查询后面加,不是每个查询都加。1.union union会移除所有重复的行,要保留重复的行,需要使用 union all。-- 有语文成绩或数学成绩的学生select stu_name from exam_score where subject in('语文')unionselect stu_name from e原创 2021-09-28 14:37:38 · 7609 阅读 · 0 评论 -
pgsql:count统计记录时去重
在count统计记录数时,如果想去重复字段的记录,可以用count(DISTINCT 字段名) 来过滤。示例如下:SELECT area_name,count(DISTINCT cdate_tno)cnt FROM t_month_cdate tcWHERE year_month='2021-08'GROUP BY area_name原创 2021-09-17 16:53:31 · 5250 阅读 · 0 评论 -
Pgsql:多表关联update更新字段和delete删除记录
想用多表关联查询并且update更新指定字段1.两表关联更新示例:UPDATE t_user_bank bSET is_active='是'FROM t_user_arch uWHERE u.arch_id=b.arch_idand u.rec_no='2021090306002'2.多表关联更新时,使用再加上inner join 或 left join等连接,示例如下UPDATE t_user_bank bSET is_active='是'FROM t_user_a...原创 2021-09-03 11:42:28 · 15034 阅读 · 0 评论 -
pgsql:如何判断字符串为数字
pgsql里面没有直接判断数字的函数,需要自己创建一个函数,然后在后续调用。以下创建了一个is_numeric的函数,入参txtstr为需要验证的字符串,验证通过则会返回bool类型值CREATE OR REPLACE FUNCTION "public"."is_numeric"("txtstr" varchar) RETURNS "pg_catalog"."bool" AS $BODY$BEGIN RETURN txtStr ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+原创 2021-09-01 13:49:05 · 5564 阅读 · 0 评论 -
pgsql:字符串字段倒序
问题表的字段cdate_tno是字符串类型,数据值如1198158,1016862,723353,451703,180093。我们希望按(数字)倒序方式展现,mssql里面查询时直接用order by cdate_tnodesc就可以了,数据库会自动转换成数字再倒序出来。pgsql则需要用::int 手动转换一下,如。select cdate_tno from 表 order by cdate_tno::int desc执行结果如下...原创 2021-07-29 15:20:58 · 2241 阅读 · 0 评论 -
PostgreSQL:“more than one owned sequence found“异常问题解决
问题本地数据库正常,但还原部署到服务器数据库后,添加表记录时提示“more than one owned sequence found”的异常报错。解决方案这个问题是自增列引起的,可能迁移或还原数据表结构时出现异常。解决的办法如下1.取消自增将该列的标识下拉项选到空白项,然后再取消“标识”勾选,保存关闭设计窗口。2.测试验证你到表里手动录入一条数据并提交,一般这时可以正常提交的。3.重新设置标识将原字段重新设置会标识自增项,下拉也选回原值,保存退出。以上.原创 2021-07-22 14:43:21 · 3622 阅读 · 0 评论 -
pgsql:远程连接时出现报错“发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录“,或者英文乱码
问题在用Navicat Premium远程连接pgsql时出现报错"发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录",或者英文乱码,其实是与上述是同一个意思。解决方案按提示找到pg安装目录下的/data/pg_hba.conf文件,打开并文件最后添加以下内容# TYPE DATABASE USER CIDR-ADDRESS METHODhost all all 0.0...原创 2021-07-15 16:06:58 · 2927 阅读 · 0 评论 -
PgSQL:日期函数参考
PostgreSQL格式化函数提供一套有效的工具用于把各种数据类型(日期/时间、integer、floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型。下面列出了这些函数,它们都遵循一个公共的调用习惯:第一个参数是待格式化的值,而第二个是定义输出或输出格式的模板。函数 返回类型 描述 例子 to_char(timestamp, text) text 把时间戳转换成字串 to_char(curren.....原创 2021-03-23 16:39:24 · 14034 阅读 · 0 评论 -
PgSQL:日期函数与计算
1.日期间隔计算使用age可以获取两个日期之间的间隔时间,用date_part获取需要的间隔单位。SELECT age(timestamp '2019-04-21'),date_part('year',age(timestamp '2019-04-21'))as v_year,date_part('month',age(timestamp '2019-04-21'))as v_month,date_part('day',age(timestamp '2019-04-21'))as v_day原创 2021-03-23 16:37:33 · 7904 阅读 · 0 评论 -
PostgreSQL:设置字段默认值
若设置字符串默认值为'否',可以如下操作:在navicat 的表设计界面中,选中字段,在默认值里面输入'否'::character varying原创 2021-02-02 17:53:06 · 7509 阅读 · 0 评论 -
Mybatis:in在where查询条件中的写法(mysql和pgsql)
在mybatis使用过程中,有时需要传递一个包含多个值的参数,用in来查询这些值范围内的数据,如fid是一个Int类型字段,现在需要查询1,2,3这三个fid的记录,直接将 1,2,3作为一个入参传递进来时,需要做些修改才能正确实现In的条件查询。1.Mysql中的写法in在where查询条件中可以使用locate函数进行查找,locate(查找字符串,源字符串) 返回值为true或false。select fid,fname from tb_demoWHERE LOCATE(CO...原创 2021-01-27 09:56:41 · 5435 阅读 · 0 评论 -
postgresql:自动生成uuid列
postgresql 有一个uuid数据类型,选择这个类型就可以在每条记录新增时自动生成uuid值。但pgsql默认没有安装uuid自动生成功能,需要手动执行命令启用该功能。方法如下:1.执行sql语句create extension "uuid-ossp"2.将字段设置为uuid类型,并且默认值设置为 uuid_generate_v4()函数3.添加记录后效果...原创 2021-01-12 19:47:07 · 11419 阅读 · 0 评论 -
PostgreSQL:字符串函数用法
字符串连接SELECT 'A'||'B'; 字符串连接,适用于字符串与数字连接SELECT CONCAT(10,'a','hello',20.0); 连接所有参数,个数不限,类型不限字母转换SELECT LOWER('ABCD'); 将字符转换成小写SELECT UPPER('ABCD'); 将字符转换成大写SELECT INITCAP('abcd'); 将字符串中每个单词的首字母大写字符串替换SELECT REPLACE('aaaxxx','a','_...原创 2021-01-12 19:28:53 · 3681 阅读 · 0 评论 -
postgresql:字符串累加拼接(聚合分组拼接)
有时,想要将某字段在查询列表的时候,按分组的不同,同组字符串累加拼接起来。想要达到的目标结果:是把cdate_tno的字符串分组累加拼接起来,如下:解决方案:使用聚合函数 string_agg,示例如下:SELECT string_agg(cdate_tno, ','),max(arch_id) FROM t_month_billGROUP BY cdate_tnostring_agg(cdate_tno, ',')中第一个参数是需要聚合拼接原创 2020-12-30 21:18:12 · 25826 阅读 · 2 评论 -
Postgresql:数据运算与函数
1、算数运算符SELECT 5+5; 加法SELECT 10-5; 减法SELECT 2*3; 乘法SELECT 10.0/3; 除法SELECT 10%7; 取余数SELECT 2^3; 幂SELECT |/25.0; 平方根SELECT ||/27.0; 三次方根SELECT 5!; 阶乘CREATE TABLE c1(a numeric,b numeric);INSERT INTO c1 VALUES(2,3),(3,4),(5...原创 2020-12-16 21:28:44 · 6738 阅读 · 1 评论