【问题标题】:Can't create table in postgresql无法在 postgresql 中创建表
【发布时间】:2017-05-01 14:51:36
【问题描述】:

执行以下查询后:

create table sel_pesan(
  pesan_id varchar(7) not null default pesan(tanggal_pesan),
  cust_id varchar(5),
  cp_nama varchar(50),
  cp_tlp varchar (20),
  tanggal_pesan date,
  tanggal_acara date,
  nama_acara varchar(40),
  sesi varchar(10),
  tempat varchar(20),
  jumlah_orang integer,
  petugas varchar(50),
  top date,
  jam_saji time without time zone,
  status_pembayaran boolean default false
);

我收到以下错误:

错误:不能在默认表达式中使用列引用

如何解决这个问题?

【问题讨论】:

  • 这个错误是不言自明的。有什么方法可以让你停止使用列引用作为默认值,并且仍然拥有你想要的逻辑?
  • 你想在那里做什么?这个pesan() 函数有什么作用?

标签: postgresql ddl postgresql-9.5


【解决方案1】:

您可以尝试创建一个函数和一个触发器,将pesan_id 的默认值分配给tanggal_pesan

注意:我不知道pesan() 是否是自定义函数。以下代码将tanggal_pesan 值赋值为字符串。

此外,您必须将pesan(tanggal_pesan) 更改为有效的字符串默认值,例如:空字符串。

CREATE OR REPLACE FUNCTION sel_pesan_insert() RETURNS trigger AS
 BEGIN
     NEW.pesan_id := to_char(NEW.tanggal_pesan, 'YYYY-MM-DD');
     RETURN NEW;
 END;
LANGUAGE plpgsql;

CREATE TRIGGER sel_pesan_insert_tgr BEFORE INSERT OR UPDATE ON sel_pesan FOR EACH ROW EXECUTE PROCEDURE sel_pesan_insert();

【讨论】:

  • date NEW.tanggal_pesan 中的date 前缀无效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2020-07-05
  • 2023-03-11
  • 2017-11-10
  • 2016-07-06
  • 2016-12-04
相关资源
最近更新 更多