作为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;
我猜,在RETURNS boolean AS $$,$$是一个占位符.
最后一行有点神秘: $$ LANGUAGE plpgsql STRICT IMMUTABLE;
顺便说一句,最后一行是什么意思?
我试图从表中获取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
我有下表,它为每个用户提供了多个电子邮件地址.

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"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]
像这样的东西:
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;
我想避免DECLARE这样做.
我需要将结果数据从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"';
所以我试图运行像这样的脚本:
select id
from owner 
where owner.name = "john's"
我收到这个错误:ERROR: column "john's" does not exist.
我也尝试过这样:where owner.name = 'john\'s'但它不起作用
任何人都知道如何运行像这样的查询?
在文档中,我只能找到一种从字符串创建日期的方法,例如DATE '2000-01-02'.这完全令人困惑和恼人.我想要的是一个带三个参数的函数,所以我可以make_date(2000, 1, 2)使用整数而不是字符串,并返回一个日期(不是字符串).PostgreSQL有这样的内置函数吗?
我问这个的原因是因为我不喜欢将字符串用于不是字符串的东西.日期不是字符串; 他们是约会对象.
我使用的客户端库是Haskell的HDBC-PostgreSQL.我正在使用PostgreSQL 9.2.2.
我正在阅读像这样的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
  )
);
上面从一个众所周知的二进制文件(WKB)创建了一些东西.我没有看到这里引用的具体方法,其中字符串是单引号,E前面是引号.
这种格式叫什么?这有什么格式规则?例如,336%E@在最后特殊或只是一些二进制值?
这是Postgres9.3/9.4; PostGIS 2.1.
我们有一个遗留数据库模式,有一些有趣的设计决策.直到最近,我们才支持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
);
在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 …我有一个包含JSON和计划文本的文本列.我想将其转换为JSON,然后选择一个特定的属性.例如:
user_data
_________
{"user": {"name": "jim"}}
{"user": {"name": "sally"}}
some random data string
我试过了:
select user_data::json#>'{user,name}' from users
我明白了:
ERROR:  invalid input syntax for type json
DETAIL:  Token "some" is invalid.
CONTEXT:  JSON user_data, line 1: some...
有可能阻止这种情况吗?