标签: hstore

将 hstore 键动态转换为一组未知键的列

我有一个数据库,它使用hstore. 为了将其合并到另一个不支持 的数据库中hstore,我想将键拆分为额外的列。

用户可以添加新的自定义字段,因此我不能提前依赖键的知识。这在“来自 hstore 列的属性作为视图中的单独列”给出了答案不适用于我的问题。

如果一条记录在其他记录中没有键,则它应该获得具有空值的同一列。

我该怎么做呢?

postgresql pivot dynamic-sql hstore

8
推荐指数
2
解决办法
5876
查看次数

Postgres hstore 检查键是否存在且与值不匹配

我在审计表中有一个 hstore 字段,用于存储因操作而更改的所有字段。

在插入时,键updated_byinchanged_fields是 NULL 并且在系统更新时它被设置为system。我想返回未定义键或未定义键的所有行,system但我不知道如何执行此操作。

到目前为止我已经尝试过

select changed_fields -> 'updated_by' 
from audit.logged_actions 
where (changed_fields -> 'updated_by' != 'system' 
       or defined(changed_fields, 'updated_by') = false) 
order by event_id desc
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我不太确定为什么。关于我做错了什么的任何想法?

postgresql hstore

6
推荐指数
1
解决办法
8067
查看次数

在 MySQL 中实现 PostgreSQL hstore 功能

请建议任何可以支持键值对集合存储在表的任何列中的 MySQL 5.5+ 引擎。

我不知道这个特性是否在 MySQL 中开箱即用,如 PostgreSQL 等价于HSTORE,它非常有用并增加了一些 NoSQL 的好处..

PostgreSQL 中的示例 -

SELECT 'a=>1,a=>2'::hstore;
  hstore
----------
 "a"=>"1"
Run Code Online (Sandbox Code Playgroud)

来源 - http://www.postgresql.org/docs/current/static/hstore.html

mysql postgresql hstore

5
推荐指数
1
解决办法
5461
查看次数

HStore 与具有继承的多个表 - 我对 HStore 有很好的用例吗?

我在这里的更广泛的问题与何时适合使用 HStore、多个表和一个表来存储类似文档的对象有关。

现在,对于我的本地化示例:我正在设计一个用于保存实验结果的数据库结构。我的第一个想法是为每个实验设置单独的表格。这看起来像:

多桌

然而,这将需要大量JOIN跨表的s,因为最终用户想要跨多个实验查找数据是相当普遍的。(旁注:也许是继承的一个很好的用例?)。我想我可以通过像这样的整体实验表来避免这种情况:

单片桌

这肯定会消除对JOINs的需要,但我觉得以某种方式将各个实验分开是合乎逻辑的。此外,要求完整进行一项实验也是很常见的。这就是为什么我正在考虑使用HStore这样的:

商店

这对我很有吸引力,因为每个单独的结果集都非常类似于文档,但我担心我会遇到多表方法带来的相同问题。

其他可能相关的考虑和想法:

  • 我已经考虑过使用额外的表来存储与单个实验中的单个数据点相关的元数据/注释。其中一些非常适合 HStore 实验表。
  • 不同的用户将输入实验数据,我会为此使用模式
  • 会有不同的实验类型——我认为处理这个问题的最好方法是将它们存储在完全不同的数据库中

我还应该提到,我对 PostgreSQL 的经验非常有限,但我已经对它提供的超越 MySQL 的功能感到高兴!

postgresql database-design hstore

5
推荐指数
1
解决办法
859
查看次数

hstore 的用例

这是我第一次(我认为)有机会使用该hstore数据类型,但我想听听更有经验的人的意见,看看我的想法实际上是个好主意。

现在,我们在这个 Web 应用程序中以 XML 文件的形式导入工资数据,它看起来大致像这个简化版本:

<Company>
    <Employee>
        <LastName>Smith</LastName>
        <FirstName>John</LastName>
        <HourlyWage>9999.99</HourlyWage>
        <!-- several other hundreds of tags -->
    </Employee>
    <Employee>
        <!-- ... -->
    </Employee> 
</Company>
Run Code Online (Sandbox Code Playgroud)

每个员工都携带着极其详细的信息,当我说“其他数百个标签”时,是因为它们通常在 800 个到 1400 个以上之间。而且这是每个月的。除了一组核心标签之外,每个员工都可以有不同的组合,因此我上面给出的数字非常波动但非常现实。

现在,部分数据是通过一个漫长、缓慢且非常复杂的过程导入的,而且我观察到,随着频率的增加,我们发现自己说“天哪,如果我们总是导入那个特定标签就好了! ”。

虽然导入过程是高度可配置的,但仅针对一小部分数据运行它是缓慢的、不切实际的并且非常痛苦。从现在开始,添加导入假设的新标签所需的任何自定义操作要容易得多,但是对于构建历史数据(就像我们总是导入它一样),它很混乱且容易出错。

作为额外的好处,这项任务总是落在这两个人身上,而我就是其中之一,我很想让我们的生活变得更简单。

这就是为什么我正在考虑编写一个快速工具,在夜间打开这些 XML 文件,并为每个月和每个员工创建一个记录,其中包含包含hstore该月所有员工标签的列。

作为 的绝对初学者hstore,这在我看来是一个非常好的用例,特别是如果我们考虑到:

  • 由于每个员工的标签可能不同,因此这本质上是无模式数据。

  • 将标签存储为 EAV(每个标签一行)对于一家拥有 200 名员工的公司来说意味着每月大约 24 万行(每年 280 万行)。当然,没有什么可担心的,但顾客并不只有一个。其中一家拥有超过 7,000 名员工(每年将有 1 亿条记录)。

  • 这些数据只需要被读取,而无需更改。另外,无论如何,它甚至不会被经常阅读。

  • 我真的不关心或不知道任何给定标签的含义。我只是想存储它以供将来使用,告诉我需要哪一个是领域专家的工作。再次强调无模式。

我要设计的表格看起来有点像这样:

- id bigserial
- user_id
- file_timestamp (it's embedded on the name of the …
Run Code Online (Sandbox Code Playgroud)

postgresql hstore postgresql-9.4

5
推荐指数
1
解决办法
640
查看次数

将 hstore 条目添加到未初始化 (NULL) 列

我最近被这个“功能”咬了。

如果您的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)

postgresql null update hstore

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

安装了 postgresql 的 hstore 不存在 hstore 类型

我最近不得不使用命令将数据库结构从一个数据库复制到另一个数据库

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 服务器。

postgresql hstore

4
推荐指数
1
解决办法
5895
查看次数

4
推荐指数
1
解决办法
153
查看次数

从 hstore 字段中提取所有标签

我需要按对象 id 从 postgres 9.2+postgis 2.1 数据库中提取(复制)所有 hstore 标签到一个外部文件中进行后处理。由于每条记录的键和值各不相同,而且我不知道键或值是什么,因此我必须使用通配符。

遗憾的是,我的秘密解码器环似乎让我失望了,因为我尝试过的一切都没有奏效,可能是因为我所有的专业知识都在 vanilla sql 和 mysql/mariadb 上。

非常感谢您的帮助。

postgresql postgresql-9.2 hstore

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

我可以将 HSTORE 列更改为 JSON 数据类型吗?

有没有办法将现有的HSTORE数据类型列(具有数据)修改JSON为 Postgres 数据库中的数据类型?

postgresql hstore json

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

在 Postgresql 中从 HSTORE 中删除密钥

目前我有一个 hstore 来描述各种项目的属性。搜索时,我需要删除每个项目唯一的值(例如序列号、vin 等)。根据 postgresql 文档,我应该能够使用以下运算符从 hstore 中删除密钥

根据 postgres 文档 hstore - text delete key from left operand 'a=>1, b=>2, c=>3'::hstore - 'b'::text

在我的代码中,我有

IF item.details ? 'vin' THEN item.details::hstore - 'vin'::TEXT; END IF;

当我去创建函数时,我收到语法错误

'“::”处或附近的语法错误'

当我从值的末尾删除类型声明时,我收到错误

'“-”处或附近的语法错误'

据我所知,这符合 postgres 文档所说的操作员应该在http://www.postgresql.org/docs/9.3/static/hstore.html 上工作的方式。有什么我想念的吗?

postgresql hstore operator

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