1

您好我正在使用postgres 12。我已经学习了几天了。

我想知道是否可以写入 CREATE TABLE 阶段:IF column_x is NULL, return 'alternative value'

这是我当前的表:

CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
      NEW.modified = NOW(); 
      RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TABLE example (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    entry_name VARCHAR(150) NOT NULL UNIQUE,
    about VARCHAR(1500),
    org_type VARCHAR(150),
    category VARCHAR(150),
    sub_categories VARCHAR(300),
    website_link VARCHAR(300) UNIQUE,
    membership VARCHAR(100),
    instagram VARCHAR(150) UNIQUE,
    twitter VARCHAR(150) UNIQUE,
    link_lists VARCHAR(100) UNIQUE,
    facebook VARCHAR(200) UNIQUE,
    youtube VARCHAR(200) UNIQUE,
    podcast VARCHAR(200) UNIQUE,
    tags VARCHAR(150),
    created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    modified TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TRIGGER set_timestamp BEFORE UPDATE ON bbdb FOR EACH ROW EXECUTE PROCEDURE update_modified_column();

因此,在这种情况下,我希望“about”和“website_link”中的任何空条目都说“即将推出”,而所有社交媒体空条目都只说“无”。我想我的 UNIQUE 约束不允许这样做?(我让他们避免条目重复,以防“entry_name”与变体一起提交)。

谢谢你的帮助。

4

1 回答 1

4

当您定义所有这些列时,UNIQUE您可以有多个null值,但不能有两行具有相同的'Coming soon'值。

但是您可以在检索期间用所需的替换替换那些 NULL 值:

select id, 
       coalesce(website_link, 'Coming Soon') as website_link,
       coalesce(about, 'Coming soon') as about,
       coalesce(twitter, 'None') as twitter,
       coalesce(instgram, 'None') as instagram
from the_table;

如果您不想每次都键入,请创建一个为您执行此操作的视图。

于 2020-07-17T20:09:56.960 回答