本文的目的是介绍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)
- centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教
- JSON字段POSTGRESQL中的单引号
- PostgreSQL 9.2中的json存储表示和检索
- postgresql – postgres jsonb_set多个密钥更新
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_json
turns数组转换为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视频教
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 用户、权限管理等
以上就介绍了centos 7下源码编译安装php支持PostgreSQL,包括了postgresql,centos 7方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
JSON字段POSTGRESQL中的单引号
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" } }');
任何想法如何逃避这个单引号?谢谢
解决方法
'{"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存储表示和检索 其解决方案就是使用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多个密钥更新
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;
但是,我需要一种方法来添加新的键值(如果它不存在)并更新键值(如果它存在).是否可以在单个查询中实现此目的?
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多个密钥更新等更多相关知识的信息可以在本站进行查询。
本文标签: