相关疑难解决方法(0)

在PostgreSQL中插入带单引号的文本

我有一张桌子test(id,name).

我需要插入样值: user's log,'my user',customer's.

 insert into test values (1,'user's log');
 insert into test values (2,''my users'');
 insert into test values (3,'customer's');
Run Code Online (Sandbox Code Playgroud)

如果我运行上述任何语句,我会收到错误.

如果有任何方法可以正确地做到这一点请分享.我不想要任何准备好的陈述.

是否可以使用sql转义机制?

postgresql quotes insert special-characters

377
推荐指数
5
解决办法
32万
查看次数

Postgres FOR LOOP

我试图从表中获取25个15,000个ID的随机样本.而不是每次都手动按下运行,我正在尝试循环.我完全理解的不是Postgres的最佳用法,但它是我的工具.这是我到目前为止:

for i in 1..25 LOOP
   insert into playtime.meta_random_sample
   select i, ID
   from   tbl
   order  by random() limit 15000
end loop
Run Code Online (Sandbox Code Playgroud)

random postgresql stored-procedures for-loop plpgsql

46
推荐指数
3
解决办法
14万
查看次数

我可以让plpgsql函数返回一个整数而不使用变量吗?

像这样的东西:

CREATE OR REPLACE FUNCTION get(param_id integer)
  RETURNS integer AS
$BODY$
BEGIN
SELECT col1 FROM TABLE WHERE id = param_id;
END;
$BODY$
  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我想避免DECLARE这样做.

postgresql variables parameters function plpgsql

30
推荐指数
1
解决办法
3万
查看次数

在函数体之前还是之后声明“LANGUAGE plpgsql”?

之间有什么区别:

CREATE FUNCTION func() RETURNS integer
    LANGUAGE plpgsql AS $$
    declare
    begin
      -- do something
    end
$$;
Run Code Online (Sandbox Code Playgroud)

CREATE FUNCTION func() RETURNS INTEGER AS $$
    declare
    begin
      -- do something
    end
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

LANGUAGE plpgsql基本上只需要超出使用范围吗$$

postgresql syntax quotes plpgsql user-defined-functions

6
推荐指数
1
解决办法
2250
查看次数

unaccent()不能与plpgsql动态查询中的希腊字母一起使用

我使用PostgreSQL 10并且我CREATE EXTENSION unaccent;成功运行.我有一个包含以下内容的plgsql函数 whereText := 'lower(unaccent(place.name)) LIKE lower(unaccent($1))';

之后,根据用户选择的内容,可以添加更多条款whereText.

whereText最终使用的查询:

placewithkeys := '%'||placename||'%';
RETURN QUERY EXECUTE format('SELECT id, name FROM '||fromText||' WHERE '||whereText)
     USING  placewithkeys , event, date;
Run Code Online (Sandbox Code Playgroud)

whereText := 'LOWER(unaccent(place.name)) LIKE LOWER(unaccent($1))';不起作用,即使我删除LOWER的部分.

我做的select __my_function('???');,我什么也没有回来,即使我应该回来的结果,因为在数据库中存在名称?????

如果我删除unaccent,并留下了LOWER它的工作原理,但没有口音:??带来了?????回来,因为它应该.这似乎unaccent是导致问题.

我错过了什么?我怎样才能解决这个问题?

由于有关于语法和可能的SQLi的评论,我提供了整个函数定义,现在更改为在希腊语中对重音不敏感和不区分大小写的工作:

CREATE  FUNCTION __a_search_place
(placename text, eventtype integer, eventdate integer, eventcentury integer, constructiondate integer, constructioncentury integer, arstyle integer, artype …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql plpgsql unaccent accent-insensitive

6
推荐指数
1
解决办法
382
查看次数

将日志文件中的行号与函数代码相匹配

我在尝试在触发函数中调试时遇到错误。在 Postgres 日志中,我有以下内容:

2012-08-16 21:41:23 PDT ERROR:  Unknown period: D
2012-08-16 21:41:23 PDT CONTEXT:  PL/pgSQL function "handle_promotion_update" 
    line 60  at assignment
SQL statement "UPDATE promotion SET some_column = foo + 1
    WHERE id = NEW.promotion_id"
PL/pgSQL function "handle_new_reward" line 94 at SQL statement
Run Code Online (Sandbox Code Playgroud)

所以,看来我的问题可能从“第 60 行”开始

我的问题是行号从哪里开始?如果我进入 pgAdmin 并查看函数声明,它的顶部有“helper”(如删除函数)。所以,我不认为它来自那里。但是,它包含函数声明吗?或者只是从 行开始BEGIN

postgresql plpgsql pgadmin

5
推荐指数
1
解决办法
2706
查看次数

从匿名块中的变量创建带有密码的用户

我想创建一个包含变量的脚本,_user并且当此类登录尚不存在时才_pass在 Postgres 数据库中创建用户。我以为这会起作用,但我不知道问题是什么:

DO
$DO$
DECLARE
  _user TEXT := 'myuser';
  _pass TEXT := 'user!pass';
BEGIN
   IF NOT EXISTS ( SELECT 1 FROM   pg_catalog.pg_roles WHERE  rolname = _user) THEN
        RAISE NOTICE 'Creating user % ...',_user;
        CREATE USER _user WITH
            LOGIN
            NOSUPERUSER
            CREATEDB
            CREATEROLE
            NOREPLICATION
            PASSWORD _pass;

        RAISE NOTICE 'Created user %',_user;
   ELSE
        RAISE NOTICE 'User % already exists, not creating it',_user;
   END IF;
END
$DO$
Run Code Online (Sandbox Code Playgroud)

如何强制用变量的内容替换变量?

$DO$还有和之间有什么区别$$

sql postgresql dynamic-sql plpgsql

4
推荐指数
1
解决办法
1959
查看次数

在 postgreSQL 中更改分隔符的简单方法

我想知道如何做到这一点,因为环顾四周后,我发现所有完成这项看似简单的工作的方法都是漫长而复杂的。在 MySQL 中,我们有

 DELIMITER //
 ...function start
 INSERT INTO table VALUES (1);
 ...function end//
 DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

当我们想使用存储过程或函数时,这非常有用。如果有的话,我正在 postgreSQL 中寻找与此等效的内容。

提前致谢!

mysql postgresql

3
推荐指数
1
解决办法
6578
查看次数

使用postgre SQL中的正则表达式验证列

我需要检查表中的列是否具有数字值后跟小数点和小数点后的3个精度.请建议如何在postgre SQL(或)任何其他替代方法中使用正则表达式.

谢谢

regex postgresql

2
推荐指数
1
解决办法
2336
查看次数

PostgreSQL 函数返回表或 SETOF

快速背景:PostgreSQL 非常新,来自 SQL Server。我正在将存储过程从 SQL Server 转换为 PostgreSQL。我已阅读 Postgres 9.3 文档并查看了大量示例和问题,但仍然找不到解决方案。

我有这个选择语句,我每周执行一次以返回新值

select distinct id, null as charges
     , generaldescription as chargedescription, amount as paidamount
from mytable
where id not in (select id from myothertable)
Run Code Online (Sandbox Code Playgroud)

我能做些什么来把它变成一个我可以右键单击并每周执行的功能。最终,我将使用另一个开发人员构建的程序自动执行此操作。因此,它将在没有用户参与的情况下执行并将结果以电子表格的形式发送给用户。不确定最后一部分是否对函数的编写方式很重要。

这是我多次失败的尝试之一:

CREATE FUNCTION newids
RETURNS TABLE (id VARCHAR, charges NUMERIC
             , chargedescription VARCHAR, paidamount NUMERIC) AS Results
Begin
SELECT DISTINCT id, NULL AS charges
     , generaldescription AS chargedescription, amount AS paidamount
FROM mytable
WHERE id NOT IN (SELECT id FROM myothertable)
END;
$$ LANGUAGE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql stored-procedures plpgsql

2
推荐指数
1
解决办法
1917
查看次数

如何在 Postgres 中使用 upsert

我想将 Postgres 中的这段代码转换为更短的代码,以实现相同的效果。我读过有关 upsert 的内容,但我不明白在我的代码上实现它的好方法。我写的很好,但我想找到一种更优雅的方式来编写它。希望这里有人可以帮助我!这是查询:

CREATE OR REPLACE FUNCTION insert_table(
    in_guid    character varying,
    in_x_value character varying,
    in_y_value character varying
)
RETURNS TABLE(response boolean) LANGUAGE 'plpgsql'

DECLARE _id integer;

BEGIN
    -- guid exists and it's been 10 minutes from created_date:
    IF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE guid = in_guid AND created_date < NOW() - INTERVAL '10 MINUTE') > 0) THEN
        RETURN QUERY (SELECT FALSE);
    
    -- guid exists but 10 minutes hasen't passed yet:
    ELSEIF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql upsert

0
推荐指数
1
解决办法
1152
查看次数