Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql函数外键_Postgresql - Fatal编程技术网

postgresql函数外键

postgresql函数外键,postgresql,Postgresql,以下是我想做的: create table stuff (some_key varchar primary key, some_data varchar) ; create table obfuscated_stuff (some_key_sha1 varchar references digest(stuff (some_key), 'sha1'), other_data varchar) ; 换句话说,我希望基于单向散列设置另一个表的外键,而不必将该散列放入

以下是我想做的:

create table stuff
   (some_key  varchar primary key,
    some_data varchar)
;

create table obfuscated_stuff
   (some_key_sha1 varchar references digest(stuff (some_key), 'sha1'),
    other_data varchar)
;
换句话说,我希望基于单向散列设置另一个表的外键,而不必将该散列放入原始表中

这是一项政策/监管要求。我可以在没有FK约束的情况下构建“fuzzated_stuff”表,但我更希望它在那里

似乎不允许在FK约束中使用函数。我也不能对视图执行FK(视图中可能包含该函数)。还有其他建议吗?

根据目前的情况,您不能这样做。只允许一列或一组列名

您是对的,您不能在视图上创建FKs。具体化视图也是如此


您可以在插入/更新referer列之前在上写入触发器,以检查引用的索引列。违反时,返回NULL或exception。在引用表的PK上,您甚至可以使用散列值创建索引。

最终目标是什么。你能不能先隐藏一个id,然后在后台加入表。这些模糊的东西的目的是什么?通常,这样的事情最好通过权限和良好的后端工程来完成。决策者不希望我们明确地加入这两个数据集。我们已经在父表上锁定了相关的列级权限。将数据插入子表的过程需要引用回父表中的行。如果可以的话,我宁愿包含一个约束,以确保引用是有效的。在将
some\u key\u sha1
插入到模糊的子表中时,您知道
some\u key
吗?不知道。我们当时只知道散列。这是匿名化方法的一部分。处理数据的作业不知道它们真正在处理哪些行,它们不需要这样做。他们只需要知道几个列的值,这些列通过一个视图公开,该视图还隐藏了源列键。谢谢。没有想到强制执行约束的触发器。我会考虑的。好主意。