我最近安装了pgAdmin III 1.18.1并注意到一件奇怪的事情:
将长json查询结果缩短为256个符号,然后添加"(...)".
有人可以帮助我禁用这种缩短吗?
我在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)
我想检查许可证是否已达到特定月份的通话限制.
在MySQL中,当我创建复合主键(比如列)时X, Y, Z,所有三列都会自动成为索引.Postgres会发生同样的事吗?
我正在使用PostgreSQL 9.1并且必须向用户授予"创建模式"ON数据库.
我怎样才能做到这一点?
我写了一个函数,输出一个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 …
显然,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.无论我需要做什么,但我也没有办法做到这一点.
我不确定如何实现以下内容:
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中,我想使用SQL语句组合两列并从中创建一个新列.
我正在考虑使用concat(...),但有更好的方法吗?
最好的方法是什么?
我试图让以下内容为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) 我有一个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)
生成的查询具有以下条件: …