我想对 json_agg 函数中的行进行排序。
我发现了这个: PostgreSQL : select columns inside json_agg
这给了我一个为 json_agg 选择特定列的解决方案,但现在我想给聚合数据一个特定的顺序。“distinct”确实有效,而“order by”则无效。
json_agg(DISTINCT (colA, colB))
Run Code Online (Sandbox Code Playgroud)
这不会:
json_agg(DISTINCT (colA, colB) ORDER BY colA ASC, colB ASC)
Run Code Online (Sandbox Code Playgroud)
有没有办法对聚合数据进行排序?
我有一个大表,其中包含许多用于预计算聚合的物化视图。新数据每天仅插入一次,因此可以将其视为数据仓库类型系统。
显然,当我查询我的主(非聚合)表时,规划器会使用它认为合适的任何索引。这是否扩展到物化视图?如果我查询主表并且查询涉及聚合,它是否识别出我的物化视图已经具有它需要的值?
我想学习 PostgreSQL 以及如何使学习过程高效,但我真的不知道即使在谷歌搜索我的问题后需要多长时间。
我之前用过 MySQL,知道关系型数据库。但是,我想使用 PostgreSQL 来实现我的 Web 后端数据库管理系统。我想要足够的知识来做这件事,设计不丑陋的结构,编写不丑陋的代码,就像我以前在另一个 Web 应用程序项目中使用 MySQL 一样。
我不是问具体时间,但至少我想在我的脑海里画一个草图。我需要投入多少精力?我会遇到什么样的问题?你学到的任何经验教训可以分享吗?
非常感谢!
我在 postgresql 数据库中有一个表,有一列类型为bytea。我想使用 id 作为文件名将每个二进制条目作为文件删除。
SQL 查询会是什么样的?
我最近被这个“功能”咬了。
如果您的hstore列未初始化并且您开始向其中添加条目,则它们都会被无声地吞下而不会出错。
这是预期的吗?
create table test_hstore(id int, map hstore);
insert into test_hstore(id,map) values(0, '');
INSERT 0 1
select * from test_hstore ;
id | map
----+-----
0 |
update test_hstore set map = map || hstore('key1', 'value1') where id = 0;
UPDATE 1
select * from test_hstore;
id | map
----+------------------
0 | "key1"=>"value1"
update test_hstore set map = null where id = 0;
UPDATE 1
select * from test_hstore;
id | map
----+--------
0 | (null)
update …Run Code Online (Sandbox Code Playgroud) 我最近不得不使用命令将数据库结构从一个数据库复制到另一个数据库
pg_dump -c -S database_name > pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
然后我在新数据库上运行转储文件
psql < pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
并且重新创建了我的模式,并安装了我的扩展。
检查已安装的扩展后,我可以看到 hstore 已安装,但是当我尝试 hstore 的基本运算符时,例如
SELECT id FROM schema_name.table_name WHERE hstore_column->'hstore_key'::TEXT = 'hstore_value'
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
operator does not exist: schema_name.hstore -> text
Run Code Online (Sandbox Code Playgroud)
如果我不尝试投射密钥,我会收到类似的错误
operator does not exist: schema_name.hstore -> unkown
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是简单地删除 hstore 扩展并重新安装它,但这样做也会删除我对 hstore 类型的众多用户函数、触发器和其他依赖项。
除了对 hstore 扩展进行级联删除之外,有没有办法解决这个错误?我正在使用 postgresql 9.3 服务器。
我有一个大表(约 900 万行),想将包含年份的字段上的行分组。到目前为止,这很容易:
// greatly simplified:
SELECT count(*), year FROM dataset GROUP BY year ORDER BY 2;
Run Code Online (Sandbox Code Playgroud)
我们定义了一些跨越多年的不规则时间段:
<1945, 1946-1964, 1965-1974, 1975-1991, 1992-2005 and >2005
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 group by 子句中对这些结果进行分组。我可以为每个时间段创建子查询。
SELECT
( SELECT count(*) FROM dataset WHERE year <= 1945 AND ...... ) AS pre1945,
( ....) AS period2,
....
FROM dataset
Run Code Online (Sandbox Code Playgroud)
但这感觉不对,我想知道是否可以让 Postgresql 做到这一点。特别是因为该查询是对实际查询的极大简化:它有多个条件,其中包括一个跨越四个表的 ST_within 子句。因此,选择子查询方法会导致查询变得臃肿。
有没有更好的方法来创建这个结果?
我们目前正在将 Oracle 数据库 10gR2 迁移到 Postgresql 数据库 9.3。多亏了 Hibernate,所有的表都可以无缝地重新创建。
但是,Oracle 数据库是巨大的。我们将编写一个小工具,将数据从一个数据库传送到另一个数据库。
我们想用某种第三方数据库比较器检查迁移的质量。
您知道可以比较 Oracle 数据库和 Postgresql 数据库(模式 + 数据)的工具吗?
我有一个具有以下架构的数据库设置:
CREATE TABLE siteInfo (
siteID SERIAL NOT NULL,
siteName TEXT NOT NULL,
siteHost TEXT NOT NULL,
notes TEXT NOT NULL,
allowableCountries TEXT NOT NULL,
displayChance INT NOT NULL,
imagePath TEXT NOT NULL,
PRIMARY KEY (siteID)
);
CREATE TABLE siteLinks (
siteID SERIAL NOT NULL,
URL TEXT NOT NULL,
FOREIGN KEY (siteID) REFERENCES siteInfo(siteID) ON DELETE CASCADE
);
CREATE TABLE siteDemographicLinks (
siteID SERIAL NOT NULL,
URL TEXT NOT NULL,
country TEXT NOT NULL,
chance INT NOT NULL,
FOREIGN KEY …Run Code Online (Sandbox Code Playgroud)