小编Erw*_*ter的帖子

pgAdmin III为什么缩短查询结果?

我最近安装了pgAdmin III 1.18.1并注意到一件奇怪的事情:

将长json查询结果缩短为256个符号,然后添加"(...)".

有人可以帮助我禁用这种缩短吗?

postgresql pgadmin

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

PostgreSQL在哪里计算条件

我在PostgreSQL中有以下查询:

SELECT 
    COUNT(a.log_id) AS overall_count
FROM 
    "Log" as a, 
    "License" as b 
WHERE 
    a.license_id=7 
AND 
    a.license_id=b.license_id 
AND
    b.limit_call > overall_count
GROUP BY 
    a.license_id;
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误:

错误:列"overall_count"不存在

我的表结构:

License(license_id, license_name, limit_call, create_date, expire_date)
Log(log_id, license_id, log, call_date)
Run Code Online (Sandbox Code Playgroud)

我想检查许可证是否已达到特定月份的通话限制.

sql postgresql group-by having

33
推荐指数
3
解决办法
4万
查看次数

PostgreSQL复合主键

在MySQL中,当我创建复合主键(比如列)时X, Y, Z,所有三列都会自动成为索引.Postgres会发生同样的事吗?

postgresql indexing composite-primary-key

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

将"创建模式"ON数据库授予用户?

我正在使用PostgreSQL 9.1并且必须向用户授予"创建模式"ON数据库.

我怎样才能做到这一点?

postgresql role postgresql-9.1

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

重构PL/pgSQL函数以返回各种SELECT查询的输出

我写了一个函数,输出一个SELECT以文本形式组成的PostgreSQL 查询.现在我不想再输出文本,但实际上SELECT对数据库运行生成的语句并返回结果 - 就像查询本身一样.

到目前为止我所拥有的:

CREATE OR REPLACE FUNCTION data_of(integer)
  RETURNS text AS
$BODY$
DECLARE
   sensors varchar(100);   -- holds list of column names
   type    varchar(100);   -- holds name of table
   result  text;           -- holds SQL query
       -- declare more variables

BEGIN
      -- do some crazy stuff

      result := 'SELECT\r\nDatahora,' || sensors ||
      '\r\n\r\nFROM\r\n' || type ||
      '\r\n\r\nWHERE\r\id=' || $1 ||'\r\n\r\nORDER BY Datahora;';

      RETURN result;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION data_of(integer) OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

sensors …

sql database postgresql dynamic-sql plpgsql

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

如何在PostgreSQL中为日期添加可变的小时数?

显然,PostgreSQL没有DATEADD,因为你可以只使用+-运算符.

我需要在日期中添加一些小时,这样就完成了:

date_field + interval '8.25 hour' 
Run Code Online (Sandbox Code Playgroud)

这很棒,但是我需要从表格中的字段中获得的小时数.会是这样的:

date_field + interval start_time 'hour' 
Run Code Online (Sandbox Code Playgroud)

我无法在任何地方找到如何做到这一点.这实际上不可能吗?

我不介意使用丑陋的黑客,比如取场值并除以3600,乘以86400.无论我需要做什么,但我也没有办法做到这一点.

postgresql datetime

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

在触发器函数中使用动态表名INSERT

我不确定如何实现以下内容:

CREATE OR REPLACE FUNCTION fnJobQueueBEFORE() RETURNS trigger AS $$
    DECLARE
        shadowname varchar := TG_TABLE_NAME || 'shadow';
    BEGIN
        INSERT INTO shadowname VALUES(OLD.*);
        RETURN OLD;
    END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

即将值插入到具有动态生成名称的表中.
执行上面的代码会产生:

ERROR:  relation "shadowname" does not exist
LINE 1: INSERT INTO shadowname VALUES(OLD.*)
Run Code Online (Sandbox Code Playgroud)

它似乎表明变量不会作为表名扩展/允许.我在Postgres手册中没有发现这个.

我已经尝试过EXECUTE这样的事情:

  EXECUTE 'INSERT INTO ' || quote_ident(shadowname) || ' VALUES ' || OLD.*;
Run Code Online (Sandbox Code Playgroud)

但没有运气:

ERROR:  syntax error at or near ","
LINE 1: INSERT INTO personenshadow VALUES (1,sven,,,)
Run Code Online (Sandbox Code Playgroud)

RECORD类型似乎失去了:OLD.*似乎被转换为字符串,并得到的重新解析,导致各种各样的类型的问题(例如NULL值). …

postgresql triggers dynamic-sql plpgsql

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

合并两列并添加到一个新列中

在PostgreSQL中,我想使用SQL语句组合两列并从中创建一个新列.

我正在考虑使用concat(...),但有更好的方法吗?
最好的方法是什么?

sql postgresql null concatenation

31
推荐指数
3
解决办法
9万
查看次数

使用LEFT JOIN查询不返回计数为0的行

我试图让以下内容为PostgreSQL中使用左连接的每个组织返回一个计数,但我无法弄清楚为什么它不起作用:

  select o.name as organisation_name,
         coalesce(COUNT(exam_items.id)) as total_used
  from organisations o
  left join exam_items e on o.id = e.organisation_id
  where e.item_template_id = #{sanitize(item_template_id)}
  and e.used = true
  group by o.name
  order by o.name
Run Code Online (Sandbox Code Playgroud)

使用coalesce似乎不起作用.我的智慧结束了!任何帮助肯定会受到赞赏!

为了澄清什么不起作用,目前查询只返回计数大于0的组织的值.我希望它为每个组织返回一行,而不管计数如何.

表定义:

TABLE exam_items
  id serial NOT NULL
  exam_id integer
  item_version_id integer
  used boolean DEFAULT false
  question_identifier character varying(255)
  organisation_id integer
  created_at timestamp without time zone NOT NULL
  updated_at timestamp without time zone NOT NULL
  item_template_id integer
  stem_id integer
  CONSTRAINT exam_items_pkey PRIMARY …
Run Code Online (Sandbox Code Playgroud)

sql postgresql count left-join

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

如何在Postgres中检查数组是否为空

我有一个Postgres功能:

CREATE OR REPLACE FUNCTION get_stats(
    _start_date timestamp with time zone,
    _stop_date timestamp with time zone,
    id_clients integer[],
    OUT date timestamp with time zone,
    OUT profit,
    OUT cost
)
RETURNS SETOF record
LANGUAGE plpgsql
AS $$
DECLARE
    query varchar := '';
BEGIN
... -- lot of code
IF id_clients IS NOT NULL THEN
    query := query||' AND id = ANY ('||quote_nullable(id_clients)||')';
END IF;
... -- other code
END;
$$;
Run Code Online (Sandbox Code Playgroud)

所以如果我运行这样的查询:

SELECT * FROM get_stats('2014-07-01 00:00:00Etc/GMT-3'
                      , '2014-08-06 23:59:59Etc/GMT-3', '{}');
Run Code Online (Sandbox Code Playgroud)

生成的查询具有以下条件: …

sql arrays postgresql null stored-procedures

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