postgresql插入bytea类型数据,sql语句

postgresql插入bytea类型数据,sql语句,第1张

PostgreSQL的二进制数据类型为bytea,可最多保存2G的数据。在ADO、ODBC等接口,可通过带参数化的插入SQL语句上传二进制。

然而在某些接口、SQL语句无法进行参数绑定,或者某些语言没有二进制的类型,或者接口的不兼容等原因,常无法上传二进制数据。

碰到这种情况下,必须在客户端将二进制转化为一定规则的字符序列,然后插入语句时,来个显示转换cast('字符序列' as bytea)

二进制转化为字符序列的规则:

分析每个字节,当其ASCII值在0到31,127到255,或为39、92,请将这字节转化为3位的八进制字符串,前面加上2个反斜杠,如chr(39)表示为//047 其他ascii值为可显示字符,不变,当然你也可全部转化为八进制,但这样整个字符串太长,浪费空间。

如二进制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'转化为字符序列为:

//000ab//351//031c

上传的时候再来个显示转换,如 insert into table1 (aa) values (cast('//000ab//351//031c' as bytea))

如果二进制数据太大,可分次上传,用||连接符连接起来,如:

insert into table1 (id,aa) values (1,cast('序列1' as bytea))

update table1 set aa=aa||cast('序列2' as bytea) where id=1

一、数据定义语言(DDL)以及外围工具:db2 与 postgresql 的区别几乎为 0,具体区别是:(desc)<>

1、db2 varchar 在没有设置特殊表空间的话,上限为 32K,postgresql 的 varchar没有这个限制;

2、db2 的二进制大对象类型 blob,在 postgresql 里用 bytea 类型代替;

3、db2的文本大对象类型 clob、long varchar,在 postgresql 里用 text 类型代替;

4、db2 中 generated by default 或者 generated always 类型键字在 postgresql 中用 serial 或者bigserial 代替;(这个区别是最大的)

5、db2 中没有序列(sequence 对象),postgresql 中有,因而更加灵活;

6、db2 中的自增主键的值重置需要 alter table,而 postgresql 里可以用 setval() 系列函数设置序列,更简单;

7、db2 中不支持空间数据类型(点、线、面),postgresql 支持;

8、db2 中事务隔离级别定义与 SQL 标准不够兼容,postgresql 完全兼容 SQL 标准;

9、db2 中 JDBC type4 驱动不支持 GBK 的数据库编码,postgresql 没有这个问题;

10、db2 的数据库编码转换非常搞笑且复杂,postgresql 很简单,只需要 set client_encoding to xxx;

11、目前 db2 81还不支持 UNICODE 后台编码,postgresql 支持,因此可以支持多内码;

12、db2 81 的触发器无法读取被触发的数据表,postgresql 没有这个限制;

13、db2 81 的触发器不能执行存储过程,postgresql 没有这个限制;

14、postgresql 中有 bit(位)、bitstring(位串)类型,db2没 有;

15、db2 的客户端 db2/db2cmd 执行 sql 脚本需要指定分隔符,比如 @;postgresql 的客户端缺省就是分号;

16、db2的客户端 db2/db2cmd 没有命令历史功能,postgresql 的客户端有,可以编辑历史命令;

17、db2 无法在同一机器上安装不同数据库版本,postgresql 可以;

18、db2 有联邦数据库的概念,postgresql 没有;

19、db2 II 可以进行异构数据库复制,postgresql 需要自己开发软件;

20、db2 81 没有很好的办法将整个数据库备份成文本脚本,postgresql 很容易;

21、db2 81的 java 存储过程重载需要重启数据库,postgresql 不需要;

22、db2 的客户端 db2/db2cmd 中的 SQL 命令缺省下无法使用折行,postgresql 的可以;

23、db2没有中文文档,postgresql有,并且很完整;

24、db2 有比较完整的错误码,postgresql 目前不够完整;

25、db2 中调用函数需要:select func() from sysibmsysdummy1,postgresql 中只需要:select func(); 即可

26、db2 中返回结果集的存储过程或者函数书写非常复杂,需要使用额外的 tablet 存储结果集,postgresql 中只是增加了 RETURN NEXT 语句;

27、db2 中存储过程没有 ROWTYPE/RECORD 类型的概念,postgresql 中有;

二、数据 *** 作语言(DML):

在基本数据 *** 作上几乎没有区别。SQL 标准的函数定义也完全相同。但是 postgresql 的类型转换函数 CAST 是 SQL 标准,db2 中略有区别,考虑到 db2 中只能进行有限的类型转换,所以,postgresql 实际上是解放了db2 开发人员。大部分 postgrsql 的函数类似 oracle,与 db2 提供的函数有些区别。

其它基本相同。

三、客户端接口

C 接口肯定差距巨大,这个不用说了。

ODBC 是标准,postgresql 提供足够的 ODBC 支持。

JDBC 是标准,不过 postgresql 只提供类型 4 的,db2 似乎更喜欢用类型 2 的。

JDBC 连接建立的区别是:

db2 的类路径是:COMibmdb2jdbcappDB2Driver (type2),comibmdb2jccDB2Driver(type4),postgresql 的类路径是:orgpostgresqlDriver。

我也不知道答案对不对符,只是把我所知道的打出来而已。

>

我们可以利用psql命令来查询sql语法。切换到PostgreSQL用户下,

[doctor@localhost ~]$ su - postgres

密码:

su: 鉴定故障

[doctor@localhost ~]$ su - postgres

密码:

-bash-43$ bash

bash-43$ psql

psql (942)

输入 "help" 来获取帮助信息

postgres=#

postgres=# help

您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面

键入: \copyright 显示发行条款

\h 显示 SQL 命令的说明

\ 显示 pgsql 命令的说明

\g 或者以分号(;)结尾以执行查询

\q 退出

postgres=#

\h 命令就是我们用来学习sql语法的命令。

postgres=# \h

可用的说明:

ABORT DEALLOCATE

ALTER AGGREGATE DECLARE

ALTER COLLATION DELETE

ALTER CONVERSION DISCARD

ALTER DATABASE DO

ALTER DEFAULT PRIVILEGES DROP AGGREGATE

ALTER DOMAIN DROP CAST

ALTER EVENT TRIGGER DROP COLLATION

ALTER EXTENSION DROP CONVERSION

ALTER FOREIGN DATA WRAPPER DROP DATABASE

ALTER FOREIGN TABLE DROP DOMAIN

ALTER FUNCTION DROP EVENT TRIGGER

ALTER GROUP DROP EXTENSION

ALTER INDEX DROP FOREIGN DATA WRAPPER

ALTER LANGUAGE DROP FOREIGN TABLE

ALTER LARGE OBJECT DROP FUNCTION

ALTER MATERIALIZED VIEW DROP GROUP

ALTER OPERATOR DROP INDEX

ALTER OPERATOR CLASS DROP LANGUAGE

ALTER OPERATOR FAMILY DROP MATERIALIZED VIEW

ALTER ROLE DROP OPERATOR

ALTER RULE DROP OPERATOR CLASS

postgres=# \h select

命令: SELECT

描述: 从资料表或视观表读取资料

语法:

[ WITH [ RECURSIVE ] with查询语句(with_query) [, ] ]

SELECT [ ALL | DISTINCT [ ON ( 表达式 [, ] ) ] ]

[ | 表达式 [ [ AS ] 输出名称 ] [, ] ]

[ FROM from列表中项 [, ] ]

[ WHERE 条件 ]

[ GROUP BY 表达式 [, ] ]

[ HAVING 条件 [, ] ]

[ WINDOW 窗口名称 AS ( 窗口定义 ) [, ] ]

[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] 查询 ]

[ ORDER BY 表达式 [ ASC | DESC | USING 运算子 ] [ NULLS { FIRST | LAST } ] [

, ] ]

[ LIMIT { 查询所用返回记录的最大数量 | ALL } ]

[ OFFSET 起始值 [ ROW | ROWS ] ]

[ FETCH { FIRST | NEXT } [ 查询所用返回记录的最大数量 ] { ROW | ROWS } ONLY

]

[ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF 表名 [, ] ] [ N

OWAIT ] [] ]

from 列表中的项可以是下列内容之一

[ ONLY ] 表名 [ ] [ [ AS ] 化名 [ ( 列的化名 [, ] ) ] ]

[ LATERAL ] ( 查询 ) [ AS ] 化名 [ ( 列的化名 [, ] ) ]

WITH查询语句名称(with_query_name) [ [ AS ] 化名 [ ( 列的化名 [, ] ) ] ]

[ LATERAL ] 函数名称 ( [ 参数 [, ] ] )

[ WITH ORDINALITY ] [ [ AS ] 化名 [ ( 列的化名 [, ] ) ] ]

[ LATERAL ] 函数名称 ( [ 参数 [, ] ] ) [ AS ] 化名 ( 列定义 [, ] )

[ LATERAL ] 函数名称 ( [ 参数 [, ] ] ) AS ( 列定义 [, ] )

[ LATERAL ] ROWS FROM( 函数名称 ( [ 参数 [, ] ] ) [ AS ( 列定义 [, ] )

] [, ] )

[ WITH ORDINALITY ] [ [ AS ] 化名 [ ( 列的化名 [, ] ) ] ]

from列表中项 [ NATURAL ] 连接 *** 作的类型 from列表中项 [ ON 用连接 *** 作的条件 |

USING ( 用于连接 *** 作的列 [, ] ) ]

with查询语句是:

WITH查询语句名称(with_query_name) [ ( 列名称 [, ] ) ] AS ( 查询 | 值 | in

sert | update | delete )

TABLE [ ONLY ] 表名 [ ]

postgres=#

看这命令对于学习sql语法很有用。

(1)"pg_catalog""varchar" 字符串

(2)"pg_catalog""bool" 布尔值

(3)"pg_catalog""int" 数值

(4)"public""table" 表

现有一个pgsql递归查询,递归查询父级节点并拼接成字符串,查询语句如下

查询结果为

将该查询语句放在函数中,运行没问题,但是使用函数查询时报错,报错如下:

类型转换问题,需要强制将返回结果转为字符串类型 varchar

将查询修改为

将上传查询放到函数中,可以正常查询。

序列数可以增加postgresql数据表的检索速度,同时降低数据查询时的资源消耗。那么如何在postgresql中创建序列数并且应用呢?下面我给大家分享一下。

工具/材料

pgAdmin4

创建序列数 01

首先打开pgAdmin4,展开postgresql数据库,找到模式下面的public选项,如下图所示

02

接下来在public下面右键单击序列,然后点击Create下面的sequence选项,如下图所示

03

在d出的创建Sequence界面中首先给序列数起一个名字,如下图所示,注意都用英文

04

然后切换到Definition页卡,定义一下序列的增加量,如下图所示,其中maximum根据自己的需要进行设置

05

最后回到数据库主界面,你会看到序列下面多出了一个项,这就是我们创建的序列数了,如下图所示

在数据表中应用序列数 01

首先选中一个数据表,点击右侧的编辑按钮,如下图所示

02

在d出的编辑界面中切换到Columns页卡,点击ID签名的编辑按钮,如下图所示

03

最后在字段的编辑界面中切换到Variables选项卡,然后在Value列中通过nextval函数带入刚才定义的序列数即可,如下图所示

以上就是关于postgresql插入bytea类型数据,sql语句全部的内容,包括:postgresql插入bytea类型数据,sql语句、在db2 中事务的概念、postgresql----数组类型和函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9749496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存