在本文中,您将会了解到关于在PostgreSQL中选择具有特定列名称的列的新资讯,同时我们还将为您解释sql选取特定行的相关在本文中,我们将带你探索在PostgreSQL中选择具有特定列名称的列的奥秘
在本文中,您将会了解到关于在PostgreSQL中选择具有特定列名称的列的新资讯,同时我们还将为您解释sql选取特定行的相关在本文中,我们将带你探索在PostgreSQL中选择具有特定列名称的列的奥秘,分析sql选取特定行的特点,并给出一些关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、postgresql – 在postgres上使用索引选择慢sql、postgresql – 如何从作为表名的变量中选择n Postgre> = 9.2、postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作的实用技巧。
本文目录一览:- 在PostgreSQL中选择具有特定列名称的列(sql选取特定行)
- centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教
- postgresql – 在postgres上使用索引选择慢sql
- postgresql – 如何从作为表名的变量中选择n Postgre> = 9.2
- postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作
在PostgreSQL中选择具有特定列名称的列(sql选取特定行)
我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我不断收到错误-我尝试了一些选项,但它们对我没有用。目前,我收到以下错误:
org.postgresql.util.PSQLException:错误:“列”处或附近的语法错误
要获取具有值的列,请尝试以下操作:
select * from weather_data where column like ''%2010%''
有任何想法吗?
答案1
小编典典column
是 保留字 。除非您双引号,否则不能将其用作标识符。像:"column"
。
不过,这并不意味着您应该这样做。只是不要使用保留字作为标识符。曾经。
到 …
选择名称为2010的列的列表:
..您可以使用此功能从系统目录表动态构建SQL命令pg_attribute
:
CREATE OR REPLACE FUNCTION f_build_select(_tbl regclass, _pattern text) RETURNS text AS$func$ SELECT format(''SELECT %s FROM %s'' , string_agg(quote_ident(attname), '', '') , $1) FROM pg_attribute WHERE attrelid = $1 AND attname LIKE (''%'' || $2 || ''%'') AND NOT attisdropped -- no dropped (dead) columns AND attnum > 0; -- no system columns$func$ LANGUAGE sql;
称呼:
SELECT f_build_select(''weather_data'', ''2010'');
返回类似:
SELECT foo2010, bar2010_id, FROM weather_data;
您不能使其完全动态,因为在实际构建查询之前,返回类型是 未知 的。
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教程有兴趣的朋友有所帮助。
postgresql – 在postgres上使用索引选择慢sql
# \d+ usermessage Table "public.usermessage" Column | Type | Modifiers | Description -------------------+-------------------+-----------+------------- id | bigint | not null | subject | character varying | | message | character varying | | read | boolean | | timestamp | bigint | | owner | bigint | | sender | bigint | | recipient | bigint | | dao_created | bigint | | dao_updated | bigint | | type | integer | | replymessageid | character varying | | originalmessageid | character varying | | replied | boolean | | mheader | boolean | | mbody | boolean | | Indexes: "usermessage_pkey" PRIMARY KEY,btree (id) "usermessage_owner_key" btree (owner) "usermessage_recipient_key" btree (recipient) "usermessage_timestamp_key" btree ("timestamp") "usermessage_type_key" btree (type) Has OIDs: no
如果在复制的数据库上执行,则select正如预期的那样快,如果在生产主机上执行它会非常慢.为了让事情变得更奇怪,并非所有时间戳都很慢,其中一些时间戳在两台主机上都很快.生产主机后面的文件系统和存储很好,而且没有大量使用.有任何想法吗?
replication# explain analyse SELECT COUNT(id) FROM usermessage WHERE owner = 1234567 AND timestamp > 1362077127010; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate (cost=263.37..263.38 rows=1 width=8) (actual time=0.059..0.060 rows=1 loops=1) -> Bitmap Heap Scan on usermessage (cost=259.35..263.36 rows=1 width=8) (actual time=0.055..0.055 rows=0 loops=1) Recheck Cond: ((owner = 1234567) AND ("timestamp" > 1362077127010::bigint)) -> BitmapAnd (cost=259.35..259.35 rows=1 width=0) (actual time=0.054..0.054 rows=0 loops=1) -> Bitmap Index Scan on usermessage_owner_key (cost=0.00..19.27 rows=241 width=0) (actual time=0.032..0.032 rows=33 loops=1) Index Cond: (owner = 1234567) -> Bitmap Index Scan on usermessage_timestamp_key (cost=0.00..239.82 rows=12048 width=0) (actual time=0.013..0.013 rows=0 loops=1) Index Cond: ("timestamp" > 1362077127010::bigint) Total runtime: 0.103 ms (9 rows) production# explain analyse SELECT COUNT(id) FROM usermessage WHERE owner = 1234567 AND timestamp > 1362077127010; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------ Aggregate (cost=267.39..267.40 rows=1 width=8) (actual time=47536.590..47536.590 rows=1 loops=1) -> Bitmap Heap Scan on usermessage (cost=263.37..267.38 rows=1 width=8) (actual time=47532.520..47536.579 rows=3 loops=1) Recheck Cond: ((owner = 1234567) AND ("timestamp" > 1362077127010::bigint)) -> BitmapAnd (cost=263.37..263.37 rows=1 width=0) (actual time=47532.334..47532.334 rows=0 loops=1) -> Bitmap Index Scan on usermessage_owner_key (cost=0.00..21.90 rows=168 width=0) (actual time=0.123..0.123 rows=46 loops=1) Index Cond: (owner = 1234567) -> Bitmap Index Scan on usermessage_timestamp_key (cost=0.00..241.22 rows=12209 width=0) (actual time=47530.255..47530.255 rows=5255617 loops=1) Index Cond: ("timestamp" > 1362077127010::bigint) Total runtime: 47536.668 ms (9 rows)
解决方法
(实际时间= 0.013..0.013行= 0循环= 1)
和
(实际时间= 47530.255..47530.255行= 5255617循环= 1)
建议我的生产数据库有更多的数据,因为行数差别很大.
postgresql – 如何从作为表名的变量中选择n Postgre> = 9.2
create or replace function pg_temp.testtst () returns varchar(255) as $$ declare r record; t_name name; begin for r in SELECT tablename FROM pg_tables WHERE schemaname = ''public'' limit 100 loop t_name = r.tablename; update t_name set id = 10 where id = 15; end loop; return seq_name; end; $$ language plpgsql;
表明
错误:关系“t_name”不存在
解决方法
您不能在嵌入式sql中将变量用作表名或列名.
UPDATE dynamic_table_name SET ....
Postgresql使用为嵌入式sql准备和保存的计划,并且对目标对象(表)的引用在计划中进行深度和硬编码 – 一些特性对计划有重大影响 – 一个表可以使用索引,而其他表不能.查询计划相对较慢,因此Postgresql不会透明地尝试它(没有少数例外).
您应该使用动态sql – 一个目的是用于类似的情况.您始终生成新的sql字符串,并且不保存计划
DO $$ DECLARE r record; BEGIN FOR r IN SELECT table_name FROM information_schema.tables WHERE table_catalog = ''public'' LOOP EXECUTE format(''UPDATE %I SET id = 10 WHERE id = 15'',r.table_name); END LOOP; END $$;
注意:动态sql不安全(存在sql注入风险),没有参数清理.我使用了“格式”功能.其他方式是使用“quote_ident”函数.
EXECUTE ''UPDATE '' || quote_ident(r.table_name) || ''SET ...
postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作
JSONB类型和函数的文档:
http://www.postgresql.org/docs/9.4/static/functions-json.html
http://www.postgresql.org/docs/9.4/static/datatype-json.html
作为例子,我有这个基本的表结构:
CREATE TABLE test(id serial,data jsonb);
插入很容易,如:
INSERT INTO test(data) values ('{"name": "my-name","tags": ["tag1","tag2"]}');
现在,我如何更新“数据”列?这是无效的语法:
UPDATE test SET data->'name' = 'my-other-name' WHERE id = 1;
这是记录在一个明显的地方,我错过了吗?谢谢。
JSON主要用于存储不需要在RDBMS中操作的整个文档。
更新Postgres中的一行总是写一个新版本的整行。这是Postgres’ MVCC model的基本原理。从性能的角度来看,无论是更改JSON对象内的单个数据还是所有内容,都几乎不重要:必须写入新版本的行。
因此advice in the manual:
JSON data is subject to the same concurrency-control considerations as
any other data type when stored in a table. Although storing large
documents is practicable,keep in mind that any update acquires a
row-level lock on the whole row. Consider limiting JSON documents to a
manageable size in order to decrease lock contention among updating
transactions. Ideally,JSON documents should each represent an atomic
datum that business rules dictate cannot reasonably be further
subdivided into smaller datums that Could be modified independently.
它的要点:要修改JSON对象中的任何内容,必须将修改的对象分配给列。 Postgres提供了有限的手段来构建和操纵json数据以及其存储功能。自9.2版本以来,每个新版本的工具的软件都大大增加。即将到来的version 9.4 is adding quite a bit。
说明如何使用Postgres 9.3的工具:
> How do I modify fields inside the new PostgreSQL JSON datatype?
今天关于在PostgreSQL中选择具有特定列名称的列和sql选取特定行的分享就到这里,希望大家有所收获,若想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、postgresql – 在postgres上使用索引选择慢sql、postgresql – 如何从作为表名的变量中选择n Postgre> = 9.2、postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作等相关知识,可以在本站进行查询。
本文标签: