本文将介绍表名作为PostgreSQL函数参数的详细情况,特别是关于mysql表名作为参数的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于cento
本文将介绍表名作为PostgreSQL函数参数的详细情况,特别是关于mysql表名作为参数的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PHP函数的PostgreSQL函数、postgresql – PL/pgSQL函数中的可选参数、postgresql – Postgres作为Processmaker中的默认数据库的知识。
本文目录一览:- 表名作为PostgreSQL函数参数(mysql表名作为参数)
- centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教
- PHP函数的PostgreSQL函数
- postgresql – PL/pgSQL函数中的可选参数
- postgresql – Postgres作为Processmaker中的默认数据库
表名作为PostgreSQL函数参数(mysql表名作为参数)
我想在Postgres函数中将表名作为参数传递。我尝试了这段代码:
CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer AS $$ BEGIN IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN return 1; END IF; return 0; END;$$ LANGUAGE plpgsql;select some_f(''table_name'');
我得到了这个:
ERROR: syntax error at or near "."LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)... ^********** Error **********ERROR: syntax error at or near "."
这是我更改为此时遇到的错误select * from quote_ident($1) tab where tab.id=1
:
ERROR: column tab.id does not existLINE 1: ...T EXISTS (select * from quote_ident($1) tab where tab.id...
可能quote_ident($1)
有效,因为如果没有where quote_ident($1).id=1
得到的部分1,则表示已选定某项。为什么第一个quote_ident($1)
工作和第二个工作不能同时进行?以及如何解决呢?
答案1
小编典典这可以进一步简化和改进:
CREATE OR REPLACE FUNCTION some_f(_tbl regclass, OUT result integer) LANGUAGE plpgsql AS$func$BEGIN EXECUTE format(''SELECT (EXISTS (SELECT FROM %s WHERE id = 1))::int'', _tbl) INTO result;END$func$;
使用架构限定名称进行调用(请参见下文):
SELECT some_f(''myschema.mytable''); -- would fail with quote_ident()
或者:
SELECT some_f(''"my very uncommon table name"'');
要点
使用OUT参数简化功能。您可以直接选择动态SQL的结果并完成。无需其他变量和代码。
EXISTS正是您想要的。您会得到true该行是否存在false。有多种方法可以做到这一点,EXISTS通常是最有效的。
您似乎想要返回一个整数,因此我将boolean结果从转换EXISTS为integer,得到的正是您所拥有的。我会返回布尔值。
我将对象标识符类型regclass用作的输入类型_tbl
。那可以做所有quote_ident(_tbl)
或format(''%I'', _tbl)
可以做的事,但是更好,因为:
..它也可以防止SQL注入。
..如果表名无效/不存在/对当前用户不可见,它将立即失败,并且更正常地失败。(regclass参数仅适用于现有表。)
..它可与模式限定的表名配合使用,在这些表名中,纯格式quote_ident(_tbl)或format(%I)由于无法解决歧义性而可能会失败。您将必须分别传递和转义模式名称和表名称。
我仍然使用format(),因为它简化了语法(并演示了如何使用),但是使用%s代替%I。通常,查询更为复杂,因此format()可以提供更多帮助。对于简单的示例,我们还可以串联:
EXECUTE ''SELECT (EXISTS (SELECT FROM '' || _tbl || '' WHERE id = 1))::int''
列表中id只有一个表时,无需对列进行表限定FROM。在此示例中,没有任何歧义。(动态)内部的SQL命令EXECUTE具有单独的作用域,函数变量或参数在那里不可见-与函数主体中的普通SQL命令相反。
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教程有兴趣的朋友有所帮助。
PHP函数的PostgreSQL函数
php是一种广泛应用于web开发领域的脚本语言,而postgresql则是一种关系型数据库管理系统,二者结合后可以实现许多强大的功能。本文将介绍php函数在postgresql中的应用和功能。
一、连接到PostgreSQL
在PHP中连接到PostgreSQL时,可以通过pg_connect()函数来创建连接。该函数需要指定数据库的主机、端口、数据库名、用户名和密码等信息。连接成功后,可以使用pg_query()函数来执行SQL查询语句。
二、查询数据
在查询数据时,可以使用pg_query()函数执行SQL查询语句,返回一个结果集。结果集中的数据可以逐行获取,使用pg_fetch_row()函数获取单行数据,使用pg_fetch_assoc()函数获取关联数组格式的数据。
立即学习“PHP免费学习笔记(深入)”;
三、插入数据
在插入数据时,可以使用pg_query()函数执行INSERT语句。INSERT语句的形式为:INSERT INTO table_name (column1, column2, …) VALUES (value1, value2, …)。
四、更新数据
在更新数据时,可以使用pg_query()函数执行UPDATE语句。UPDATE语句的形式为:UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition。
五、删除数据
在删除数据时,可以使用pg_query()函数执行DELETE语句。DELETE语句的形式为:DELETE FROM table_name WHERE condition。
六、事务处理
在PostgreSQL中,可以使用事务来对数据库进行批处理的操作。事务处理可以包括插入、修改、删除等多个操作,保证在整个事务中,只要有一个操作失败,整个事务就不会被执行。PHP中可以使用pg_query()函数执行BEGIN、COMMIT、ROLLBACK等事务控制语句。
七、存储过程和函数
PostgreSQL支持存储过程和函数的编写和调用,可以使用pg_query()函数执行CREATE FUNCTION语句创建存储过程或函数。CREATE FUNCTION语句的形式为:CREATE FUNCTION function_name(argument_list) RETURNS return_type AS $$ function_body $$ LANGUAGE plpgsql;
在调用存储过程或函数时,可以使用pg_prepare()函数和pg_execute()函数。pg_prepare函数用于预处理SQL语句,而pg_execute()函数则用于执行已经预处理过的语句。
八、总结
通过本文的介绍,我们可以看到PHP函数在PostgreSQL中的强大功能。PHP函数可以连接、查询、插入、更新、删除数据,可以进行事务控制,还可以编写和调用存储过程和函数。这些功能的综合使用,可以为Web应用提供高效、稳定和安全的后台数据库服务。
以上就是PHP函数的PostgreSQL函数的详细内容,更多请关注php中文网其它相关文章!
postgresql – PL/pgSQL函数中的可选参数
例如(PSEUDO CODE):
CREATE OR REPLACE FUNCTION foofunc(param1 integer,param2 date,optional_list_of_ids=[]) RETURNS SetoF RECORD AS $$ IF len(optional_list_of_ids) > 0 THEN RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2 AND id in optional_list_of_ids); ELSE RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2); ENDIF $$ LANGUAGE sql;
实现此功能的正确方法是什么?
顺便说一句,我想知道如何在另一个外部函数中调用这样的函数。我就是这样做的 – 它是正确的,还是有更好的方法?
CREATE FUNCTION foofuncwrapper(param1 integer,param2 date) RETURNS SetoF RECORD AS $$ BEGIN CREATE TABLE ids AS SELECT id from foobar where id < 100; RETURN QUERY (SELECT * FROM foofunc(param1,param2,ids)); END $$ LANGUAGE sql
CREATE OR REPLACE FUNCTION foofunc(_param1 integer,_param2 date,_ids int[] DEFAULT '{}') RETURNS SetoF foobar AS -- declare return type! $func$ BEGIN -- required for plpgsql IF _ids <> '{}'::int[] THEN -- exclude empty array and NULL RETURN QUERY SELECT * FROM foobar WHERE f1 = _param1 AND f2 = _param2 AND id = ANY(_ids); -- "IN" is not proper Syntax for arrays ELSE RETURN QUERY SELECT * FROM foobar WHERE f1 = _param1 AND f2 = _param2; END IF; END -- required for plpgsql $func$ LANGUAGE plpgsql;
主要观点:
>关键字DEFAULT用于声明参数默认值。短期替代方案:=。
>我从凌乱的例子中删除了多余的param1。
>由于返回SELECT * FROM foobar,因此将返回类型声明为RETURNS SetoF foobar而不是RETURNS SetoF记录。具有匿名记录的后一种形式非常笨拙,您必须为每次调用提供列定义列表。
>我使用整数(int [])数组作为函数参数。相应地改编了IF表达式和WHERE子句。
>在纯sql中没有IF语句。必须是LANGUAGE plpgsql。
使用或不使用_ids调用:
SELECT * FROM foofunc(1,'2012-1-1'::date);
实际上是一样的:
SELECT * FROM foofunc(1,'2012-1-1'::date,'{}'::int[]);
你必须确保通话是明确的。如果你有另一个同名和两个参数的函数,Postgres可能不知道要选哪个。显式演员(就像我演示的那样)缩小了它。否则,无类型的字符串文字也可以工作,但显式永远不会受到伤害。
从另一个函数调用:
CREATE FUNCTION foofuncwrapper(_param1 integer,_param2 date) RETURNS SetoF foobar AS $func$ DECLARE _ids int[] := '{1,2,3}'; BEGIN -- irrelevant stuff RETURN QUERY SELECT * FROM foofunc(_param1,_param2,_ids); END $func$ LANGUAGE plgpsql;
postgresql – Postgres作为Processmaker中的默认数据库
解决方法
这是下一版本4.0正在考虑的问题,但尚未做出正式决定.
所以,现在,如果你想使用ProcessMaker,它必须在MySQL数据库上.
关于表名作为PostgreSQL函数参数和mysql表名作为参数的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PHP函数的PostgreSQL函数、postgresql – PL/pgSQL函数中的可选参数、postgresql – Postgres作为Processmaker中的默认数据库的相关知识,请在本站寻找。
本文标签: