为什么我的视图的列可以为空?

2024-01-14

我在 Windows 上运行 PostgreSQL 9.2。

我有一个现有的表,其中包含一些不可为空的列:

CREATE TABLE testtable
(
  bkid serial NOT NULL,
  bklabel character varying(128),
  lacid integer NOT NULL
}

我在此表上创建一个视图:

CREATE OR REPLACE VIEW test AS
SELECT testtable.bkid, testtable.lacid
from public.testtable;

我很惊讶视图的 information_schema.columns 报告 is_nullable 对于所选列来说是 YES ?

select * from information_schema.columns where table_name = 'test'

报告:

"MyDatabase";"public";"test";"bkid";1;"";"YES";"integer";;;32;2;0;;"";;"";"";"";"";"";"";"";"";"";"MyDatabase";"pg_catalog";"int4";"";"";"";;"1";"NO";"NO";"";"";"";"";"";"";"NEVER";"";"NO"
"MyDatabase";"public";"test";"lacid";2;"";"YES";"integer";;;32;2;0;;"";;"";"";"";"";"";"";"";"";"";"MyDatabase";"pg_catalog";"int4";"";"";"";;"2";"NO";"NO";"";"";"";"";"";"";"NEVER";"";"NO"

这是预期的行为吗?

我的问题是,我试图在实体框架数据模型中导入此类视图,但它失败了,因为所有列都被标记为可为空。

EDIT 1 :

以下查询:

select attrelid, attname, attnotnull, pg_class.relname
from pg_attribute
inner join pg_class on attrelid = oid
where relname = 'test'

返回:

attrelid;attname;attnotnull;relname
271543;"bkid";f;"test"
271543;"lacid";f;"test"

正如预期的那样,attnotnull 是“false”。

正如 @Mike-Sherrill-Catcall 所建议的,我可以手动将它们设置为 true :

update pg_attribute
set attnotnull = 't'
where attrelid = 271543

更改反映在 information_schema.columns 中:

select * from information_schema.columns where table_name = 'test'

输出是:

"MyDatabase";"public";"test";"bkid";1;"";"NO";"integer";;;32;2;0;;"";;"";"";"";"";"";"";"";"";"";"MyDatabase";"pg_catalog";"int4";"";"";"";;"1";"NO";"NO";"";"";"";"";"";"";"NEVER";"";"NO"
"MyDatabase";"public";"test";"lacid";2;"";"NO";"integer";;;32;2;0;;"";;"";"";"";"";"";"";"";"";"";"MyDatabase";"pg_catalog";"int4";"";"";"";;"2";"NO";"NO";"";"";"";"";"";"";"NEVER";"";"NO"

我将尝试导入实体框架数据模型中的视图。

EDIT 2 :

正如猜测的那样,它有效,视图现在已正确导入到实体框架数据模型中。 当然,我不会将所有列设置为不可为空,如上面所示,只会将基础表中的那些不可为空。


我相信这是预期的行为,但我并不假装完全理解它。基表中的列似乎具有正确的属性。

这里的 information_schema 的系统表中的列似乎是“attrnotnull”。我在 pgsql-hackers listserv 上只看到一个线程引用“attnotnull”:编目 NOT NULL 约束 http://www.postgresql.org/message-id/1343682669-sup-2532@alvh.no-ip.org。 (但该专栏在早期版本中可能有不同的名称。这可能值得研究。)

您可以通过此查询查看行为。您需要使用 WHERE 子句才能准确获得您需要查看的内容。

select attrelid, attname, attnotnull, pg_class.relname
from pg_attribute
inner join pg_class on attrelid = oid
where attname like 'something%'

在我的系统上,具有主键约束的列和具有 NOT NULL 约束的列将“attnotnull”设置为“t”。视图中的相同列将“attnotnull”设置为“f”。

如果你的头倾斜得恰到好处,眯起眼睛的话,kind of说得通。专栏在视图中未声明为 NOT NULL。只是基表中的列。

pg_attribute.attnotnull 列是可更新的。您可以将其设置为 TRUE,并且该更改似乎反映在 information_schema 视图中。虽然您可以直接将其设置为 TRUE,但我认为将其设置为与基表中的值匹配会更舒服。 (并且通过更舒服,我并不是说我对在系统表中乱搞感到很舒服。)

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

为什么我的视图的列可以为空? 的相关文章

随机推荐

  • 将 CoffeeScript 与 Eclipse 集成?

    有没有一种方法可以集成 CoffeeScript 和 Eclipse 以便当我在一个窗口中编写 CoffeeScript 时 另一个窗口会将编译后的代码显示为 Javascript 我会等待答案 谢谢 我已经在我的项目中使用构建器和小型 s
  • 图像权限(不希望它们出现在图库中)

    我正在开发一个将图像存储在 Android data 文件夹中的应用程序 这些图片在画廊中可见 但我不想要这样 是否可以设置文件夹的权限 以便它们只能由应用程序本身使用 或者我应该将它们存储在另一个文件夹中 创建一个名为 nomedia在文
  • 我可以将 LESS 与 Xul 一起使用吗?

    我可以用吗LESS http lesscss org 与徐尔 有人已经一起使用过它们吗 我还没见过有人使用它 但没有什么能阻止你尝试 LESS 只是一个预处理器 它输出 CSS 文件 因此您可能会发现的问题应该与您可能需要使用的 Mozil
  • 当字符串包含多个双引号时,从字符串中提取 URL 的正则表达式失败?

    我正在使用正则表达式从字符串中提取 url 它大部分工作正常 var regex new Regex a href a
  • 在 android 中从 Shoutcast Url 播放

    我正在开发一个需要播放 Shoutcast 广播的应用程序 对于API我已经遵循了这个URL http wiki winamp com wiki SHOUTcast Radio Directory API 我成功地使用我的开发者 ID 获取
  • 在 CUDA 中使用 SIMD 实现位旋转运算符

    我知道 StackOverflow 不是用来向其他人询问代码的 但让我说一下 我正在尝试在 CUDA C 设备代码中实现一些 AES 函数 在尝试实现左字节旋转运算符时 我很不安地发现没有原生 SIMD 内在功能 所以我开始了一个幼稚的实现
  • 会计和数据库设计,存储借方和贷方金额

    问题 在下面的情况下 我是否应该将所有金额存储为正小数金额 然后将该金额标记为 借方 或 贷方 而不是将借方存储为负金额 将贷方存储为正金额 在我的数据库设计中 我将 借方 存储为负金额 将贷方存储为正金额 现在 在报告中有时结果会出错 因
  • 附件动作序列(UITableViewController)

    我正在尝试通过 IB 进行 segue 当按下 tableView 中的单元格附件时切换视图 来自我的IB的图片 1 我从 tableviewcontroller 的单元格拖动到另一个视图并选择 Accessory Action gt Pu
  • 如何使用 InvokeCommandAction 调用我的方法并传入参数?

    我一直在试图弄清楚如何从Loaded 事件 我在这里问了一个问题 我将如何在 Loaded 上传递参数 https stackoverflow com questions 30488770 how would i go about pass
  • 如何通过代码判断iPad是黑色还是白色? [复制]

    这个问题在这里已经有答案了 我想知道是否有办法通过代码判断 iPad 是黑色还是白色 简单的谷歌搜索没有发现任何结果 iPhone 上的序列号为您提供了所有这些信息 您只需将颜色代码映射到颜色本身即可 iPhone SN 的典型格式如下 A
  • UIButton 将点击和滚动手势传递给 UIScrollView

    我有一个水平分页的UIScrollView with a UIButton部分覆盖滚动视图 像这样 UIView UIScrollView UIButton 我想做UIButton不触发点击按钮上方滚动并释放 我想要UIScrollView
  • Python(TKinter)中形状的随机填充颜色

    我想知道如何从列表中获取随机颜色以在draw rectangle colors red orange yellow green blue violet canvas create rectangle self x self y self x
  • redux-toolkit createSlice 可以使用 js Map 作为状态吗?

    一般来说 使用可变对象 例如Map is 强烈劝阻 https redux js org faq organizing state can i put functions promises or other non serializable
  • 在 Selenium 中每个元素使用多个定位器的优点/缺点?

    我正在测试一个仍在开发中的网站 通常 元素的 id 类 文本或 DOM 中的位置会发生变化 然后我一直使用的定位器将不再能够找到该元素 但这些功能仍然可以正常运行 我不希望在没有实际回归的情况下多次测试失败 因此 我没有为每个元素使用单个定
  • CSS 页脚基于最小高度固定位置

    我看过这里和各种教程 但无法达到我需要的效果 因此 如果页面内容高度低于 600 像素 我希望页脚固定在该高度的容器下方 但是 如果内容将容器高度增加到超过 600 像素 则页脚应被容器向下推到页面上 我尝试使用 min height 来使
  • 根据一列将一张表拆分为多个表[重复]

    这个问题在这里已经有答案了 给定一个表 dataFrame x name day earnings revenue Oliver 1 100 44 Oliver 2 200 69 John 1 144 11 John 2 415 54 Jo
  • 即使我使用 -ldl 链接,Cmake 也未定义对符号 'dlsym@@GLIBC_2.2.5 的引用

    我收到未定义的引用dlsym GLIBC 2 2 5即使在库之前和之后链接它之后也是如此 然而 在链接输出中 它似乎是在之前链接的 但我想在所有库之前链接应该有效 bin g 9 CMakeFiles http downloader dir
  • 我该如何解决这个问题?我无法编译我的 flutter web

    我该如何解决这个问题 颤动构建网络 具有良好零安全性的建筑 目标 dart2js 失败 异常 警告 dart2js 入口点脚本已弃用 请使用 dart 编译 js 反而 C Users DELL AppData Local Pub Cach
  • TestNG - 在测试类之间共享状态

    我有一个testng questions tagged testng我通过 testng xml 文件运行的测试类套件 这很好用 所有测试都是串行运行的 因此不存在并行执行障碍 我现在的目标是获取一个测试类中的测试方法生成的状态 例如 cu
  • 为什么我的视图的列可以为空?

    我在 Windows 上运行 PostgreSQL 9 2 我有一个现有的表 其中包含一些不可为空的列 CREATE TABLE testtable bkid serial NOT NULL bklabel character varyin