当前位置: 首页 > 知识库问答 >
问题:

Postgresql:为什么\d表不将默认值显示为null

高海阳
2023-03-14

我是MySQL的博士后新手。

我创建了一个表,其列“col”的默认值为null。

CREATE TABLE widgets (id serial primary key, col bigint default null);
CREATE TABLE
test=# \d+ widgets;
                                                Table "public.widgets"
 Column |  Type   | Collation | Nullable |               Default               | Storage | Stats target | Description 
--------+---------+-----------+----------+-------------------------------------+---------+--------------+-------------
 id     | integer |           | not null | nextval('widgets_id_seq'::regclass) | plain   |              | 
 col    | bigint  |           |          |                                     | plain   |              | 
Indexes:
    "widgets_pkey" PRIMARY KEY, btree (id)

test=# 

但是,在默认列中,没有任何内容表明它是空字段。

在模式输出中,默认值应该显示为null吗?

我也尝试了上面的相同示例,但使用了默认99。键入\d时,Default列中没有显示任何内容。在该示例中,我插入一行,INSERT INTO小部件(id)VALUES(1);它获取默认值99,因此我知道正在使用默认值(至少对于整数值)。更新:默认列实际上显示了99。我使用了自动完成\d并查看了错误的表。

对于默认的null,当我SELECT*从小部件时,列显示为空白。

Postgres是否没有显式显示标记为“null”的值?如果不是,如何区分空文本字段和空值字段?

共有1个答案

宋志学
2023-03-14

当未指定任何内容时,列的默认值总是null。显然,psql开发人员认为,将null显示为默认值毫无意义。可能是因为这是标准行为,或者因为null不是“值”。

\d输出中仅显示非空默认值。

如何区分和空文本字段和空值字段?

空字符串'null值不同,您将看到输出中的差异:

postgres=# CREATE TABLE null_test (c1 text default null, c2 text default '');
CREATE TABLE
postgres=# \d null_test
            Table "public.null_test"
 Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+----------
 c1     | text |           |          |
 c2     | text |           |          | ''::text
 类似资料:
  • 问题内容: 是否可以使用默认值覆盖display属性?例如,如果我以一种样式将其设置为none,而我想以其默认值以其他方式覆盖它。 还是找出该元素的默认值然后将其设置为默认值的唯一方法?不想知道元素通常是block,inline还是任何一个… 问题答案: 浏览器的默认样式在其用户代理样式表中定义,您可以在此处找到其来源。不幸的是,级联和继承级别3规范似乎并未提出一种将样式属性重置为其浏览器默认值的

  • 首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。

  • 我被一个奇怪的编程问题困住了。我已经定义了一个模式,其中如果没有为列(列名是Title)传递值,那么将使用默认值(Harry)。 标题|字符变化(64)|默认“Harry”::字符变化 而且,我正在尝试通过我的java应用程序使用hibernate插入条目。 发生的情况是,hibernate在任何查询中都显式地为该列提供空值,因此这些条目的默认值不会显示在表中。 这里要提到的是,当我自己执行任何i

  • 问题内容: 我正在学习Go,并且一直沉迷于Go旅游(exercise- stringer.go:https : //tour.golang.org/methods/7)。 这是一些代码: 所以我想出了is 的内部表示,所以散布算子起作用了。但我得到: 有没有搞错?字符串切片也不起作用,这是怎么回事? 编辑 :对不起,我的问题中有一个错误- 错误是关于type的,不是。我在玩代码,并且粘贴了错误的输

  • 问题内容: 例如,如果component是一个复选框,则必须将其设置为false,或者是textfield,则必须清除文本。我正在尝试编写一种方法来重置中的所有组件。它必须像HTML表单中的reset函数一样工作。 如何将a重设为默认值? 问题答案: 一种可能的解决方法是创建自定义重置功能。重新初始化面板(您的表单)。 例如 创建一个自定义类来存储表单字段及其侦听器。 重新初始化面板组件将导致按@

  • 问题内容: 通常,在switch语句中不需要默认值。但是,在以下情况下,仅当我取消注释默认语句时,代码才能成功编译。有人可以解释为什么吗? 问题答案: 您必须取消注释的原因是您的函数说它返回一个,但是如果您只为定义了标签,那么如果您传入其他任何内容,该函数将不会返回值。Java要求所有声明它们返回值的函数实际上在所有可能的控制路径上都返回一个值,并且在您的情况下,编译器不确信所有可能的输入都返回了