GVKun编程网logo

Postgresql中的JSON输出(psql json)

15

本文的目的是介绍Postgresql中的JSON输出的详细情况,特别关注psqljson的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Postgresql中的JSO

本文的目的是介绍Postgresql中的JSON输出的详细情况,特别关注psql json的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Postgresql中的JSON输出的机会,同时也不会遗漏关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、JSON字段POSTGRESQL中的单引号、PostgreSQL 9.2中的json存储表示和检索、postgresql – postgres jsonb_set多个密钥更新的知识。

本文目录一览:

Postgresql中的JSON输出(psql json)

Postgresql中的JSON输出(psql json)

我希望我不会在这里遗漏非常明显的东西,
我想从postgres函数获取JSON输出(我想很多其他人都已经需要这个),并且很乐意在我的服务器上安装contrib函数的扩展,

有什么方法可以从sql或plpgsql函数获取JSON输出(或在db-server-side
python的帮助下)?具体来说,我想将record[]结果作为JSON。

答案1

小编典典

自PostgreSQL 9.2以来,内置了对JSON的支持,并且在最新版本中增加了许多其他功能(例如:PostgreSQL
0.4中的JSON函数)。

特别是,row_to_json将记录转换为JSON对象,然后将array_to_jsonturns数组转换为JSON数组。

例如,可以将两个函数结合起来以轻松地将SELECT查询结果转换为JSON:

SELECT array_to_json(array_agg(row_to_json(t))) FROM     (SELECT col1, col2, col3 FROM example_table) t

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

1. 下载源码

$ mkdir /usr/downloads
$ wget -c http://cn2.php.net/distributions/php-5.6.20.tar.gz
$ tar -xvf php-5.6.20.tar.gz
$ mv php-5.6.20 /usr/local/src
$ cd !$ & cd php-5.6.20
登录后复制

2. 阅读安装指导

$ ls -also
$ less README
$ less INSTALL
登录后复制

3. 安装依赖包

$ yum install apr apr-util apr-devel apr-util-devel prce lynx
登录后复制

4. 安装httpd

$ wget -c http://apache.fayea.com//httpd/httpd-2.4.20.tar.gz
$ tar -xvf httpd-2.4.20.tar.gz
$ cd httpd-2.4.20
$ ./configure \
--prefix=/usr/local/programs/apache2 \
--enable-rewrite \
--enable-so \
--enable-headers \
--enable-expires \
--with-mpm=worker \
--enable-modules=most \
--enable-deflate \
--enable-module=shared
$ make
$ make install
$ cd /usr/local/programs/apache2
$ cp bin/apachectl /etc/init.d/httpd ## 复制启动脚本
$ /etc/init.d/httpd start ## 启动apache服务器,访问http://localhost/
$ egrep -v ''^[ ]*#|^$'' /usr/local/apache2/conf/httpd.conf | nl ## 查看apache服务器的配置
## 将apache加入系统服务
vi /etc/rc.d/rc.local
```
/usr/local/programs/apache2/bin/apachectl start
```
$ cat /etc/rc.local
登录后复制

4. 安装postgresql

立即学习“PHP免费学习笔记(深入)”;

$ yum install readline-devel  ## 安装readline依赖
$ cd /usr/downloads
$ wget -c https://ftp.postgresql.org/pub/source/v9.5.0/postgresql-9.5.0.tar.bz2
$ tar -xvf postgresql-9.5.0.tar.bz2
$ cd postgresql-9.5.0
$ ./configure --prefix=/usr/local/programs/postgresql
$ make
$ su
$ make install
$ /sbin/ldconfig /usr/local/programs/postgresql/lib ## 刷新下共享动态库
$ cd /usr/local/programs/postgresql
$ bin/psql --version  ## 检查运行情况
## 开始对postgresql的配置
$ vi /etc/profile.d/postgresql.sh ## 增加环境变量,不推荐直接在/etc/profile中添加,系统更新升级时会需要merge
``` 
PATH=/usr/local/programs/postgresql:$PATH
export PATH
```
$ source /etc/profile ## 更新环境变量

## 增加用户和其他文件夹
$ adduser postgres
$ passwd postgres 
$ mkdir /usr/local/programs/postgresql/logs
$ mkdir /usr/local/programs/postgresql/data
$ chown postgres /usr/local/programs/postgresql/data
$ su - postgres

## 初始化数据库
$ ./bin/initdb -D ./data
$ ./bin/createdb test
$ ./bin/psql test
## 已有数据库,可导入data文件夹后尝试root访问,假如带密码,可能需要进一步研究下
$ ./bin/postgres -D ./data >./logs/start-log-1.log 2>&1 &
$ ./bin/psql --list  ##列出数据库
## ok,安装完成

## 自定义设置,权限控制等,可以跳过,等熟悉使用后再做
## 编辑数据库配置及权限文件:
$ vi /usr/local/programs/postgresql/data/postgresql.conf   ## 数据库配置文件
$ chown postgres postgresql.conf
$ chmod 644 postgresql.conf
$ vi /usr/local/programs/postgresql/data/pg_hba.conf   ## 权限文件
$ vi /usr/local/programs/postgresql/data/pg_ident.conf

## 设置开机自启动:
$ vi /etc/rc.d/rc.local    ## 添加如下内容
```
/usr/local/programs/postgresql/bin/postgresql start
```
登录后复制

5. 安装php

## 源码已经在第一步中下载,现在开始安装:
$ yum install libxml2 libxml2-devel libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel
$ ./configure \
--prefix=/usr/local/programs/php \
--with-apxs2=/usr/local/programs/apache2/bin/apxs \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-zlib-dir \
--enable-mbstring \
--with-pgsql=/usr/local/programs/postgresql \
--with-pdo-pgsql=/usr/local/programs/postgresql 
$ make
$ make test
> Bug #42718 (unsafe_raw filter not applied when configured as default filter) [ext/filter/tests/bug42718.phpt]  XFAIL REASON: FILTER_UNSAFE_RAW not applied when configured as default filter, even with flags
> Bug #67296 (filter_input doesn''t validate variables) [ext/filter/tests/bug49184.phpt]  XFAIL REASON: See Bug #49184
> Bug #53640 (XBM images require width to be multiple of 8) [ext/gd/tests/bug53640.phpt]  XFAIL REASON: Padding is not implemented yet
> zend multibyte (7) [ext/mbstring/tests/zend_multibyte-07.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
> zend multibyte (9) [ext/mbstring/tests/zend_multibyte-09.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
>Bug #70470 (Built-in server truncates headers spanning over TCP packets) [sapi/cli/tests/bug70470.phpt]  XFAIL REASON: bug is not fixed yet

## 查阅官方的bug,发现:
> id=66582: status : Closed. Fixed in master (PHP7)
> id=42718: status : Assigned
> id=42718: reference to id=49184, unsolved for many years
## 那就不关心了,直接装吧
$ make install
> You may want to add: /usr/local/programs/php/lib/php to your php.ini include_path

## 那就按它说的设置吧
$ cp php.ini-development /usr/local/programs/php/lib/php.ini
```
include_path = ".;/usr/local/programs/php/lib/php"

## 然后,编辑httpd的设置,确保其能正确解析php文件
```
...
LoadModule php5_module modules/libphp5.so
...
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php5

...
<ifmodule dir_module>
    DirectoryIndex index.html index.php
</ifmodule>     
```

## 重启httpd,测试
$ cd /usr/local/programs/apache2
$ bin/httpd -h
$ bin/httpd -k stop
$ bin/httpd -f conf/httpd.conf
## 默认设置的www页面在./htdocs/下,那就先去里面建一个测试页面吧
$ vi htdocs/index.php
```
<?php phpinfo(); ?>
```
$ curl http://localhost/index.php |grep postgresql
#ok
登录后复制

后续应该做的事

* 1. 启动时,不需要要手动指定配置文件
* 2. php初始化www目录设置
* 3. php 用户、权限管理等

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了centos 7下源码编译安装php支持PostgreSQL,包括了postgresql,centos 7方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

JSON字段POSTGRESQL中的单引号

JSON字段POSTGRESQL中的单引号

我试图用一个单引号操纵一个 JSON,我遇到了一些麻烦:

1.-当我有一个函数时,我不能作为参数传递一个带有单引号的JSON字符串:
这是功能:

CREATE OR REPLACE FUNCTION public.give_me_text
(
  IN  text  json
)
RETURNS JSON AS
$$
DECLARE
v_text   varchar;
begin

RAISE NOTICE 'text: %',text;
v_text:=text || '- hello';
return v_text;
end
$$
LANGUAGE 'plpgsql';

通过调用这样工作:

SELECT * FROM give_me_text
(
'{"es":"name 1","en":"name 2","de":"name 3","fr":"name 4","pt":"name 5"}'
);

但是当我得到一个单引号不起作用时:

SELECT * FROM give_me_text
    (
    '{"es":"nam'e 1","pt":"name 5"}'
    );

2.-当我试图插入单引号的JSON值时,它给了我同样的错误:
这是有效的:

INSERT INTO public.my_columns VALUES ('{ "name": "Book the First","author": { "first_name": "Bob","last_name": "White" } }');

但这不起作用:

INSERT INTO public.my_columns VALUES ('{ "name": "Book's the First","last_name": "White" } }');

任何想法如何逃避这个单引号?谢谢

解决方法

在sql中,单引号必须以字符串形式转义.这不是有效的字符串:
'{"es":"nam'e 1"}'

因为字符串在“nam之后结束.你可以通过重复它来逃避单引号:

'{"es":"nam''e 1"}'

如果您正在执行dynamic SQL,则可以传递参数来执行:

execute 'insert into YourTable (col1) values ($1);' using json_var;

PostgreSQL 9.2中的json存储表示和检索

PostgreSQL 9.2中的json存储表示和检索

PostgreSQL 9.2中的json存储表示和检索 其解决方案就是使用hstore类型,使用它,先得创建对应的扩展。 www.2cto.com 下面只列出简单的使用示例: iihero=# create extension hstore; CREATE EXTENSION iihero=# iihero=# select a=1,b=2::hstore; hstore ---


PostgreSQL 9.2中的json存储表示和检索

 

其解决方案就是使用hstore类型,使用它,先得创建对应的扩展。

  www.2cto.com  

下面只列出简单的使用示例:

 

iihero=# create extension hstore;

CREATE EXTENSION

iihero=#

iihero=# select ''a=>1,b=>2''::hstore;

  hstore

--------------------

 "a"=>"1", "b"=>"2"

(1 row)

 

iihero=# insert into tjson values(1, ''a=>1, b=>2, c=>3''::hstore);

INSERT 0 1

iihero=# insert into tjson values(2, ''a=>2, b=>3, c=>4''::hstore);

INSERT 0 1

iihero=# select * from tjson where col2 @>''a=>1'';

 id | col2

----+------------------------------

  1 | "a"=>"1", "b"=>"2", "c"=>"3"

(1 row)

 

iihero=# select * from tjson where col2 @>''a=>1'' and col2 @>''b=>2'';

 id | col2

----+------------------------------

  1 | "a"=>"1", "b"=>"2", "c"=>"3"

(1 row)

 

所不同的,只是语法表现形式的不同。还可以充分利用索引。

 

postgresql – postgres jsonb_set多个密钥更新

postgresql – postgres jsonb_set多个密钥更新

我有DB表和jsonb列.
number  | data
    1   | {"name": "firstName","city": "toronto","province": "ON"}

我需要一种更新数据列的方法.
所以我的输出应该是这样的:

{"name": "firstName","city": "ottawa","province": "ON","phone": "phonenum","prefix": "prefixedname"}

json_set可以吗?
我添加了如下查询:

update table_name set data = jsonb_set(data,'{city}','"ottawa"') where number = 1;

但是,我需要一种方法来添加新的键值(如果它不存在)并更新键值(如果它存在).是否可以在单个查询中实现此目的?

documentation says:

The || operator concatenates the elements at the top level of each of its operands. … For example,if both operands are objects with a common key field name,the value of the field in the result will just be the value from the right hand operand.

所以使用你的示例数据:

update table_name set
  data = data || '{"city": "ottawa","prefix": "prefixedname"}'
where number = 1;

此外,如果您要编辑的对象不在顶层 – 只需组合连接和jsonb_@R_400_5301@.例如,如果原始数据看起来像

{"location": {"name": "firstName","province": "ON"}}

然后

...
data = jsonb_set(data,'{location}',data->'location' || '{"city": "ottawa","prefix": "prefixedname"}')
...

今天关于Postgresql中的JSON输出psql json的介绍到此结束,谢谢您的阅读,有关centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、JSON字段POSTGRESQL中的单引号、PostgreSQL 9.2中的json存储表示和检索、postgresql – postgres jsonb_set多个密钥更新等更多相关知识的信息可以在本站进行查询。

本文标签: