相关疑难解决方法(0)

什么是'$$'用于PL/pgSQL

作为PL/pgSQL的新手,这个函数中双美元符号的含义是什么:

CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS $$
BEGIN
  IF NOT $1 ~  e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THEN
    RAISE EXCEPTION 'Wrong formated string "%". Expected format is +999 999';
  END IF;
  RETURN true; 
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

我猜,在RETURNS boolean AS $$,$$是一个占位符.

最后一行有点神秘: $$ LANGUAGE plpgsql STRICT IMMUTABLE;

顺便说一句,最后一行是什么意思?

postgresql quotes plpgsql dollar-sign dollar-quoting

82
推荐指数
2
解决办法
3万
查看次数

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万
查看次数

Postgres - 将行转置为列

我有下表,它为每个用户提供了多个电子邮件地址.

在此输入图像描述

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"3个电子邮件地址.

user.name | user.id | email1          | email2           | email3**

Mary      | 123     | mary@gmail.com  | mary@yahoo.co.uk | mary@test.com

Joe       | 345     | joe@gmail.com   | [NULL]           | [NULL]
Run Code Online (Sandbox Code Playgroud)

sql database postgresql transpose crosstab

38
推荐指数
2
解决办法
9万
查看次数

我可以让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万
查看次数

PostgreSQL:将结果数据从SQL查询导出到Excel/CSV

我需要将结果数据从PostgreSQL中的查询导出到Excel/CSV.
我用PostgreSQL 8.2.11.

SQL error:

ERROR:  relative path not allowed for COPY to file
In statement:

COPY (select distinct(m_price) from m_product)TO '"c:\auto_new.txt"';
Run Code Online (Sandbox Code Playgroud)

postgresql file-io postgresql-copy

22
推荐指数
3
解决办法
10万
查看次数

postgresql在where子句中转义单引号

所以我试图运行像这样的脚本:

select id
from owner 
where owner.name = "john's"
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:ERROR: column "john's" does not exist.

我也尝试过这样:where owner.name = 'john\'s'但它不起作用

任何人都知道如何运行像这样的查询?

sql postgresql

20
推荐指数
2
解决办法
3万
查看次数

是否有一个函数需要一年,一个月和一天在PostgreSQL中创建一个日期?

在文档中,我只能找到一种从字符串创建日期的方法,例如DATE '2000-01-02'.这完全令人困惑和恼人.我想要的是一个带三个参数的函数,所以我可以make_date(2000, 1, 2)使用整数而不是字符串,并返回一个日期(不是字符串).PostgreSQL有这样的内置函数吗?

我问这个的原因是因为我不喜欢将字符串用于不是字符串的东西.日期不是字符串; 他们是约会对象.

我使用的客户端库是Haskell的HDBC-PostgreSQL.我正在使用PostgreSQL 9.2.2.

sql postgresql sql-date-functions

18
推荐指数
3
解决办法
2万
查看次数

Postgres字符串之前的"E"是什么?

我正在阅读像这样的Postgres/PostGIS语句:

SELECT ST_AsBinary(
ST_GeomFromWKB(
  E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@',
  4326
  )
);
Run Code Online (Sandbox Code Playgroud)

上面从一个众所周知的二进制文件(WKB)创建了一些东西.我没有看到这里引用的具体方法,其中字符串是单引号,E前面是引号.

这种格式叫什么?这有什么格式规则?例如,336%E@在最后特殊或只是一些二进制值?

这是Postgres9.3/9.4; PostGIS 2.1.

postgresql postgis string-literals wkb

18
推荐指数
2
解决办法
8401
查看次数

PostgreSQL独特约束中的多个可空列

我们有一个遗留数据库模式,有一些有趣的设计决策.直到最近,我们才支持Oracle和SQL Server,但我们正在尝试添加对PostgreSQL的支持,这引发了一个有趣的问题.我搜索了Stack Overflow和其他互联网,我不相信这种特殊情况是重复的.

对于唯一约束中的可空列,Oracle和SQL Server的行为都相同,这实际上是在执行唯一检查时忽略NULL列.

假设我有以下表格和约束:

CREATE TABLE EXAMPLE
(
    ID TEXT NOT NULL PRIMARY KEY,
    FIELD1 TEXT NULL,
    FIELD2 TEXT NULL,
    FIELD3 TEXT NULL,
    FIELD4 TEXT NULL,
    FIELD5 TEXT NULL,
    ...
);

CREATE UNIQUE INDEX EXAMPLE_INDEX ON EXAMPLE
(
    FIELD1 ASC,
    FIELD2 ASC,
    FIELD3 ASC,
    FIELD4 ASC,
    FIELD5 ASC
);
Run Code Online (Sandbox Code Playgroud)

在Oracle和SQL Server上,保留任何可为空的列NULL将导致仅对非空列执行唯一性检查.所以以下插入只能执行一次:

INSERT INTO EXAMPLE VALUES ('1','FIELD1_DATA', NULL, NULL, NULL, NULL );
INSERT INTO EXAMPLE VALUES ('2','FIELD1_DATA','FIELD2_DATA', NULL, NULL,'FIELD5_DATA');
-- These will succeed when they should violate …
Run Code Online (Sandbox Code Playgroud)

sql postgresql null database-design unique-constraint

16
推荐指数
3
解决办法
3875
查看次数

在Postgres中防止'json类型的'无效输入语法'

我有一个包含JSON和计划文本的文本列.我想将其转换为JSON,然后选择一个特定的属性.例如:

user_data
_________
{"user": {"name": "jim"}}
{"user": {"name": "sally"}}
some random data string
Run Code Online (Sandbox Code Playgroud)

我试过了:

select user_data::json#>'{user,name}' from users
Run Code Online (Sandbox Code Playgroud)

我明白了:

ERROR:  invalid input syntax for type json
DETAIL:  Token "some" is invalid.
CONTEXT:  JSON user_data, line 1: some...
Run Code Online (Sandbox Code Playgroud)

有可能阻止这种情况吗?

postgresql json plpgsql

11
推荐指数
2
解决办法
2万
查看次数