我正在尝试使用 plv8 从 openstreetmaps 反向地理编码器检索数据。我试图查看文档,但找不到有关如何从作为 JSON 返回的 URL 获取数据然后在函数中解析它的任何信息。
任何人都可以协助吗?
我正在尝试使用 plv8 从 openstreetmaps 反向地理编码器检索数据。我试图查看文档,但找不到有关如何从作为 JSON 返回的 URL 获取数据然后在函数中解析它的任何信息。
任何人都可以协助吗?
这是我的查询:
select locid,tlid,locdescription from (
select locid, tlid, locdescription
from
trip_log left join trip_log_det on tlid=tldtripid
left join locations on tldlocation=locid
where tlid=50 order by tldid
) as foo group by locid,tlid,locdescription
使用子查询的目的是让数据按照内部查询重新排序,因此按tldid
. 我不需要tldid
数据,因为它是一个串行列,它会使group by
语句无效。
有没有办法告诉子查询保持内部查询的顺序?
有一个返回数组的函数,在查询中我们使用该函数返回结果,例如:
{"TUNDUMA GOING (BORDER)","ARRIVAL DATE",09/01/2016,22,"AT CHECKPOINT"}
{"TUNDUMA RETURN (BORDER)","DEPARTURE DATE",29/01/2016,2,"ON THE ROAD"}
我们如何添加一个WHERE
子句来过滤数组的第 5 列,仅搜索ON THE ROAD
值?
有没有办法参考array[4]
?
试过
where trip_status(tlid) <@ array['AT CHECKPOINT']::varchar
trip_status()
作为返回数组但出现以下错误的函数:
Query failed: ERROR: operator does not exist: character varying[] <@ character varying LINE 6: ...ere trip_closed(tlid)=false and trip_status(tlid) <@ array[ ... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
是否存在类似的东西where trip_status(tlid)[4] = 'AT CHECKPOINT'
?
我遇到了一个问题,但我不明白。在 mac 上运行 PostgreSQL 并有这个查询:
select tldid,
tldaction,
to_char(tldactiondate, 'dd/mm/YYYY') as tldactiondate,
locdescription,
lttype,
tldorder
from trip_log
left join trip_log_det on tlid=tldtlid
left join locations on tldlocation=locid
left join location_types on loctype=ltid
where tlid = 12
order by tldid, tldorder
示例表数据为:
93;"DEPARTURE DATE";"";"DAR ES SALAAM";"LOADING POINT";4
94;"LOADING DATE";"";"DAR ES SALAAM";"LOADING POINT";2
95;"DEPARTURE DATE";"";"TUNDUMA GOING";"BORDER";4
96;"ARRIVAL DATE";"";"TUNDUMA GOING";"BORDER";1
97;"ARRIVAL DATE";"";"SOLWEZI";"OFFLOADING POINT";1
98;"OFFLOADING DATE";"";"SOLWEZI";"OFFLOADING POINT";3
99;"DEPARTURE DATE";"";"TUNDUMA RETURN";"BORDER";4
100;"ARRIVAL DATE";"";"TUNDUMA RETURN";"BORDER";1
101;"ARRIVAL DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";1
102;"OFFLOADING DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";3
我想得到的结果如下:
94;"LOADING DATE";"";"DAR ES SALAAM";"LOADING POINT";2
93;"DEPARTURE DATE";"";"DAR ES SALAAM";"LOADING POINT";4
96;"ARRIVAL DATE";"";"TUNDUMA GOING";"BORDER";1
95;"DEPARTURE DATE";"";"TUNDUMA GOING";"BORDER";4
97;"ARRIVAL DATE";"";"SOLWEZI";"OFFLOADING POINT";1
98;"OFFLOADING DATE";"";"SOLWEZI";"OFFLOADING POINT";3
100;"ARRIVAL DATE";"";"TUNDUMA RETURN";"BORDER";1
99;"DEPARTURE DATE";"";"TUNDUMA RETURN";"BORDER";4
101;"ARRIVAL DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";1
102;"OFFLOADING DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";3
我无法按最后一列 (tldorder) 排序,因为那样会影响旅行的逻辑。我需要根据最后一列 (tldorder) 求出结果,但仍保持原始locdescription
值序列。分析前两行数据:
93;"DEPARTURE DATE";"";"DAR ES SALAAM";"LOADING POINT";4
94;"LOADING DATE";"";"DAR ES SALAAM";"LOADING POINT";2
我需要交换它们,这样它就会变成:
94;"LOADING DATE";"";"DAR ES SALAAM";"LOADING POINT";2
93;"DEPARTURE DATE";"";"DAR ES SALAAM";"LOADING POINT";4
接下来的两行相同
95;"DEPARTURE DATE";"";"TUNDUMA GOING";"BORDER";4
96;"ARRIVAL DATE";"";"TUNDUMA GOING";"BORDER";1
必须成为:
96;"ARRIVAL DATE";"";"TUNDUMA GOING";"BORDER";1
95;"DEPARTURE DATE";"";"TUNDUMA GOING";"BORDER";4
问题是我无法订购,locdescription
因为这些是预设的,并且必须在整个查询过程中保持特定的顺序,因为这是在公路旅行中定义的地点,但它们可以在“它们自己”中随意调整。
这是表中数据的顺序。
DAR ES SALAAM
DAR ES SALAAM
TUNDUMA GOING
TUNDUMA GOING
SOLWEZI
SOLWEZI
TUNDUMA RETURN
TUNDUMA RETURN
DAR ES SALAAM
DAR ES SALAAM
它们必须保持这样,但是可以交换值的键以便根据tldorder
值对它们进行排序。
如果我执行上面显示的查询,我会得到与表中相同的结果:
93;"DEPARTURE DATE";"";"DAR ES SALAAM";"LOADING POINT";4
94;"LOADING DATE";"";"DAR ES SALAAM";"LOADING POINT";2
95;"DEPARTURE DATE";"";"TUNDUMA GOING";"BORDER";4
96;"ARRIVAL DATE";"";"TUNDUMA GOING";"BORDER";1
97;"ARRIVAL DATE";"";"SOLWEZI";"OFFLOADING POINT";1
98;"OFFLOADING DATE";"";"SOLWEZI";"OFFLOADING POINT";3
99;"DEPARTURE DATE";"";"TUNDUMA RETURN";"BORDER";4
100;"ARRIVAL DATE";"";"TUNDUMA RETURN";"BORDER";1
101;"ARRIVAL DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";1
102;"OFFLOADING DATE";"";"DAR ES SALAAM";"OFFLOADING POINT";3
我想我已经理解了这个问题。我按 tldid 订购,它是一个序列号,而不是多次相同的值。一旦我也对 tldorder 进行排序,该值将链接到一个唯一的 tldid 值。这就是排序不起作用的原因。有什么办法可以解决这个问题吗?
CREATE TABLE public.trip_log_det
(
tldid integer NOT NULL DEFAULT nextval('trip_lod_det_tldid_seq'::regclass),
tldtlid integer,
tldlocation integer,
tldaction character varying,
tldactiondate date,
tldorder integer, -- Ordering for arrival loading offloading and departure actions so user does not get confused!
CONSTRAINT trip_lod_det_pkey PRIMARY KEY (tldid),
CONSTRAINT trip_lod_det_tldlocation_fkey FOREIGN KEY (tldlocation)
REFERENCES public.locations (locid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE public.locations
(
locid integer NOT NULL DEFAULT nextval('locations_locid_seq'::regclass),
locdescription character varying,
loctype integer,
CONSTRAINT locations_pkey PRIMARY KEY (locid),
CONSTRAINT "loctype->lttype" FOREIGN KEY (loctype)
REFERENCES public.location_types (ltid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE public.location_types
(
ltid integer NOT NULL DEFAULT nextval('location_types_ltid_seq'::regclass),
lttype character varying,
ltdeparturedate boolean NOT NULL DEFAULT false,
ltarrivaldate boolean NOT NULL DEFAULT false,
ltloadingdate boolean NOT NULL DEFAULT false,
ltoffloadingdate boolean NOT NULL DEFAULT false,
CONSTRAINT location_types_pkey PRIMARY KEY (ltid)
);
假设我们有 4 个布尔字段 a、b、c、d
当所有 4 个都为真时,我们如何返回任何一个为真的字段,而不是什么都没有?
where a=true or b=true or c=true or d=true
将返回一行,其中甚至所有 4 个字段都设置为真。如何从查询中排除这一行?
如果搜索值是false
有没有办法将所有文本数据强制为大写,而无需重复为每个表编写函数或在客户端执行它?
如何在 pgsql 中使用正则表达式从字符串中提取所有数字?
select regexp_matches('dsa8a552a5a2a5?', '\d+');
只会输出 8 个。
需要得到8552525
假设我们有一个包含四列(a,b,c,d)
相同数据类型的表。
是否可以选择列中数据中的所有不同值并将它们作为单列返回,还是我必须创建一个函数来实现这一点?
假设我们有这样的查询:
select * from table where a=1 or b=2 or c=3
满足的条件是a=1
和c=3
是否有可能在查询中(在输出中)知道哪些列a
与c
where 子句匹配?
根据主题,我正在研究一种可靠的方法来同步两个远程 postgresql 数据库之间具有相同结构的 2 个表。
我在考虑 dblink,但不太确定,因为在这些数据库连接的地方是一个大问题,而且非常不可靠,这会迫使我将我的数据库暴露在互联网上,这是我不喜欢的想法。
另一种选择是为自己编写一个实现完整性检查的守护进程,但在继续之前,我想知道是否有人遇到过类似的挑战以及已经采取了哪些解决方案。
根据主题,我有一个 varchar 字段,其中存储了一些用逗号分隔的数字。该列表会根据客户的选择而增长和缩小。然后我在查询中使用它来检查特定值是否在该列表中
value || ','
它运行良好,但正在考虑将其转换为整数数组。
这在技术/性能方面和正确编程数据库方面都是更好的解决方案吗?
我正在尝试从 PHP 中准备一个查询,例如:
pg_prepare($con, "prep", "select * from test where tid in ($1)");
然后执行它:
$strpar = "3,4,6,8,10";
pg_execute($con, "prep", array($strpars));
问题是我无法传递一系列构建的值,因为 prepare 需要固定数量的参数。有没有办法使参数动态化?
根据主题,当序列达到其最大值时会发生什么?
什么是行为?我有一个以序列作为主键的大表,我想知道。
谢谢。