在从 Postgres 9.4 到 Greenplum 的数据迁移过程中,我应该如何处理我的 UNIQUE 约束

2024-05-29

当我执行以下 sql (它包含在由 生成的 sql 文件中)pg_dumpGreenplum 中的 Postgres9.4):

CREATE TABLE "public"."trm_concept" (
"pid" int8 NOT NULL,
"code" varchar(100)  NOT NULL,
"codesystem_pid" int8,
"display" varchar(400) ,
"index_status" int8,
CONSTRAINT "trm_concept_pkey" PRIMARY KEY ("pid"),
CONSTRAINT "idx_concept_cs_code" UNIQUE ("codesystem_pid", "code")
);

我收到这个错误:

ERROR:  Greenplum Database does not allow having both PRIMARY KEY and UNIQUE constraints

为什么greenplum不允许这样做?我确实需要这个独特的约束来保证某些规则,我该如何在 greenplum 中修复它?


  • a UNIQUE约束是通过 btree 索引完成的
  • 主键意味着UNIQUE and NOT NULL
  • GreenPlum 分发给子/分片或任何您声称的内容UNIQUE.

格林豪泰实施UNIQUE约束——如你所愿——该索引必须是

  • 抄送给每个孩子
  • 以符合 ACID 的方式更新

这样做将完全消除运行 GreenPlum 的好处。您也可以回到 PostgreSQL。

来自有关 CREATE TABLE 的文档 http://gpdb.docs.pivotal.io/4380/ref_guide/sql_commands/CREATE_TABLE.html

创建表时,有一个附加子句来声明Greenplum数据库的分配策略。如果未提供 DISTRIBUTED BY 或 DISTRIBUTED RANDOMLY 子句,则 Greenplum 使用 PRIMARY KEY(如果表有)或表的第一列作为分布键向表分配哈希分布策略。几何或用户定义数据类型的列不符合 Greenplum 分布键列的资格。如果表没有符合条件的数据类型的列,则行将根据循环或随机分布进行分布。为了确保 Greenplum 数据库系统中数据的均匀分布,您需要为每条记录选择唯一的分布键,或者如果不可能,则选择 DISTRIBUTED RANDOMLY。

同一个文档对主键说了这一点,

对于一个表来说,要有主键,它必须是散列分布的(不是随机分布的),并且主键唯一的列必须包含Greenplum分布键的所有列。

这是文档的内容创建索引 http://gpdb.docs.pivotal.io/4320/ref_guide/sql_commands/CREATE_INDEX.html

在Greenplum数据库中,仅当索引键的列与Greenplum分布键相同(或其超集)时才允许使用唯一索引。在分区表上,唯一索引仅在单个分区内受支持,而不是在所有分区中受支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在从 Postgres 9.4 到 Greenplum 的数据迁移过程中,我应该如何处理我的 UNIQUE 约束 的相关文章

  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 从postgresql中的jsonb嵌套数组中删除键值对

    我有 jsonb 数据作为 a b 1 c 2 d 3 b 4 c 5 d 6 g b 1 c 2 d 3 b 4 c 5 d 6 我想从 a 和 g 键的嵌套数组中删除 c 键 是否有一个查询可以执行此操作 SELECT jsonb ob
  • 转义 to_tsquery 中的特殊字符

    如何转义传递给的字符串中的特殊字符to tsquery 例如 这种查询 select to tsquery AT T 生产 NOTICE text search query contains only stop words or doesn
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • MySQL 与 PostgreSQL JSON 搜索功能

    我一直在寻找一篇博客文章或一个功能矩阵 通过 JSON 功能对 MySQL 和 PostgreSQL 进行比较 我找到了一个好的Postgres 的特征矩阵 https www postgresql org about featuremat
  • 如何使用单个查询对从另一个表检索的表列表进行 UNION?

    我有一个表 其中包含 PostgreSQL 中的表列表 id table 1 table1 2 table2 3 table3 我想从所有这些表的联合中进行选择 例如 伪代码 select from union select table f
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • 错误:运算符不存在:整数 = 字符变化,使用 Postgres 8.2

    我有一个用旧版本的 Eclipse Ganymede 如果我没记错的话 开发的 Java EE Web 应用程序 我最近迁移到 Kubuntu 12 04 LTS 并将应用程序迁移到 Eclipse Kepler 我从 Eclipse 网站
  • SQLAlchemy 无法连接到本地主机上的 Postgresql

    我确信这是一个很容易修复的错误 只要我能找到它在哪里 这是 Flask 应用程序的错误 11 58 18 web 1 ERROR xxxxxx core Exception on GET 11 58 18 web 1 Traceback m
  • 使用 Python 使用正确的编码从 Oracle 导入

    我很抱歉提出一个字符编码问题 因为我知道你们每天都会遇到很多问题 但我无法弄清楚我的问题 所以我还是问了 这是我们正在做的事情 使用 Python 从 Oracle DB 获取数据并cx Oracle 使用 Python 将数据写入文件 使
  • 如何查询 JSON 元素

    假设我有一个 Postgres 数据库 9 3 并且有一个名为Resources 在里面Resources表我有字段id这是一个 int 和data这是一个 JSON 类型 假设我在该表中有以下记录 1 firstname Dave las
  • 是否可以在 postgresql 中创建触发器而不执行过程?

    我想创建一个程序 其主体为 BL 我在 SQL 中找到了相同的示例 但在 postgresql 中没有找到 每个 RDBMS 都有自己的 SQL 语言 您无法在 PostgreSQL 中创建触发器 因为您可以在 Oracle MS SQL
  • 减少 plpgsql 中烦人的通知

    我有一个使用临时表的函数 如果存在则必须将其删除 drop table if exists t xy create temp table t xy on commit drop as select 随后我在视图中使用这个函数 当 selec
  • Spring:如何将 KeyHolder 与 PostgreSQL 一起使用

    最近迁移到 POSTGRESQL 我试图获取在数据库表中创建新条目时唯一生成的密钥 桌子screenstable看起来像这样 CREATE TABLE screenstable id serial NOT NULL screenshot b
  • 基准测试:PostgreSQL 上的 bigint 与 int

    我想提高数据库性能 在一个项目中 所有表都来自int to bigint 我认为这不仅在存储方面是一个糟糕的选择 因为int需要4 bytes and bigint需要8 bytes 但也与性能有关 所以我创建了一个小表1000万条目 其中
  • Postgres 数据库中特殊的时区处理

    我的环境 I m in 法国巴黎 UTC 1 or CET It s 12am 00 00 我们在2016 年 11 月 25 日 My Postgres数据库托管于亚马逊网络服务 AWS RDS 在eu west 1 region 问题
  • 具有位变化的 PostgreSQL 位运算符“不能与不同大小的位字符串”

    我有一个变化的位掩码字段 我想对其执行按位与操作 PG Error ERROR cannot AND bit strings of different sizes SELECT groups FROM groups WHERE read r
  • Postgres Notify 不适用于逻辑复制

    我正在使用逻辑复制将数据从 Postgres 10 4 复制到另一个 Postgres 10 4 实例 订阅者有多个触发器将事件记录到单个表中 该表有一个触发器 该触发器执行另一个函数 返回触发器 来为下游侦听器调用 NOTIFY 审计表上
  • Brew Postgresql 启动但进程未运行

    我在 Mac 上通过 Brew 安装了 Postgres 然后 我尝试启动它 gt brew services restart postgres Stopping postgresql might take a while gt Succe

随机推荐