GVKun编程网logo

表名作为PostgreSQL函数参数(mysql表名作为参数)

19

本文将介绍表名作为PostgreSQL函数参数的详细情况,特别是关于mysql表名作为参数的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于cento

本文将介绍表名作为PostgreSQL函数参数的详细情况,特别是关于mysql表名作为参数的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PHP函数的PostgreSQL函数、postgresql – PL/pgSQL函数中的可选参数、postgresql – Postgres作为Processmaker中的默认数据库的知识。

本文目录一览:

表名作为PostgreSQL函数参数(mysql表名作为参数)

表名作为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视频教

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教程有兴趣的朋友有所帮助。

PHP函数的PostgreSQL函数

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函数中的可选参数

postgresql – PL/pgSQL函数中的可选参数

我正在尝试用可选参数编​​写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
自从Postgresql 8.4(您似乎正在运行)以来,有 default values for function parameters.如果您将参数设置为最后并提供默认值,则可以在调用中省略它:
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中的默认数据库

postgresql – Postgres作为Processmaker中的默认数据库

默认情况下,Processmaker 3.0.1.8使用MysqL数据库.我们不想增加维护两个数据库的工作.我们不能放过Postgres但是要使用Processmaker我们还需要使用MysqL.是否有人使用Postgres 9.2使用ProcessMaker 3.0.1.8.

解决方法

ProcessMaker目前不支持Postgres作为核心应用程序数据库.

这是下一版本4.0正在考虑的问题,但尚未做出正式决定.

所以,现在,如果你想使用ProcessMaker,它必须在MySQL数据库上.

关于表名作为PostgreSQL函数参数mysql表名作为参数的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PHP函数的PostgreSQL函数、postgresql – PL/pgSQL函数中的可选参数、postgresql – Postgres作为Processmaker中的默认数据库的相关知识,请在本站寻找。

本文标签: