【问题标题】:SQL domain ERROR: column does not exist, setting defaultSQL 域错误:列不存在,设置默认值
【发布时间】:2019-01-21 02:13:05
【问题描述】:

我创建了一个域:

CREATE DOMAIN public."POSTAL_CODE"
  AS character(5)
  NOT NULL;

我尝试设置默认值:

ALTER DOMAIN public."POSTAL_CODE"
SET DEFAULT "00000";

但得到错误:

错误:“00000”列不存在

然后我设法使用DEFAULT 00000 设置默认值,但我认为它被转换为INTEGER,因为它显示为0 而不是00000。我试过character(5)[]{'0','0','0','0','0'} 也没有成功。

如何获取默认值作为文本而不报错?

我用的是 PostgreSQL。

【问题讨论】:

标签: sql postgresql string-constant


【解决方案1】:

在 SQL 中用双引号 " are used 引用名为“select”的列或表

SQL 中的string constant 是由单引号 (') 包围的任意字符序列,例如 'This is a string'。所以这和双引号字符不一样("

因此,您必须使用如下所示的单引号

select * from test where old_code = '220088242'

所以在你的情况下应该如下所示

ALTER DOMAIN public."POSTAL_CODE"
    SET DEFAULT '00000';

【讨论】:

    【解决方案2】:

    试试这个:值应该在单引号中,例如 '00000'

    ALTER DOMAIN public."POSTAL_CODE" set default '00000';
    

    【讨论】:

    • 我更正了语法。有人,请同行评审我的编辑。
    • 对你有帮助吗?
    • 不管怎样,你可以留下一些关于双引号和单引号之间区别的注释,就像@jarlh 所做的那样
    • 添加到答案中
    【解决方案3】:

    试试这个

    Alter table <table name> ALTER <column name> TYPE character varying, ALTER <column name> SET DEFAULT '00000'
    

    【讨论】:

    • 我的数据库中没有任何表,我应该使用什么表?域与表没有任何关系,AFAIK。
    • 我只是想给你语法以供进一步使用..如果它不是表,你可以替换它然后只需删除名称表Alter DOMAIN....等等你的查询......跨度>
    • 您在文档中看到ALTER TABLE 吗?检查postgresql.org/docs/9.5/static/sql-alterdomain.html
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2010-11-04
    • 2018-03-21
    相关资源
    最近更新 更多