我是一名新手程序员,目前正在研究如何在表格列中存储PostgreSQL列类型。具体来说,我想创建一个包含名为' type'的列的表。存储以下类型之一:boolean
,integer
,text
和enum
。但是,从概念上讲,我希望用户存储他想要使用的值。应该都可以使用整数,一段文本或选项列表。请参阅下面的示例表。
id | type | default value
---------------------------------------------------------------
1 | integer | 5
2 | boolean |
3 | enum("red", "blue", "yellow") | red
最后一个案子让我困惑。由于我的知识有限,我知道创建一个包含type
列且类型为enum("boolean", "integer", "text", "enum")
的列的表是可行的,但我不知道如何允许样本表中的最后一个案例。看起来这只允许类型enum
,但在这种情况下我无法指定默认值,例如red
,因为红色未列在enum
类型的选项中
我有两个问题:
type
的列指定哪种类型? 非常感谢任何答案或帮助。谢谢!
答案 0 :(得分:1)
我认为你混淆/混合了许多不同的东西。
关于枚举类型
您可以将表格的列声明为enumerated type。为此,您需要定义类型:
CREATE TYPE my_color_enum AS ENUM ( 'red', 'blue', 'yellow' );
然后在表中使用它就像任何其他类型一样:
CREATE TABLE test ( column1 my_color_enum );
如果您需要为column1
分配默认值,则只允许您定义ENUM
类型中存在的默认值,例如,当有效时 :
CREATE TABLE test ( column1 my_color_enum default 'red');
此不是,会产生错误:
CREATE TABLE test ( column1 my_color_enum default 'green' );
因为您的类型中不存在"green"
值。错误消息看起来像这样(这是一个松散的翻译,而不是确切的错误消息):
枚举my_color_enum的输入值无效:“green”
在一列中存储不同的数据类型
这似乎是一个糟糕的设计,但如果你真的需要它,而宁愿避免text
数据类型然后来回转换,你可以使用json
,jsonb
等等所述...
如果您决定使用存储数据类型的查找表,那么它会咬你。