我有一個表與各種列 - 其中一些可以爲NULL(沒有默認值)。Postgresql - 在一個函數後觸發NULL列使所有有效載荷無效
所以我創建了一個觸發器,每當我在表中插入一個新值,我想觸發一個pg_notify
。 (提示:我總是關於SQL的noob)。
問題是,如果只有一列可以爲空有一個空值,那麼pg_notify
發出的所有有效載荷爲空。
一個很簡單的例子:
postgres=# create table example(id serial, name varchar);
CREATE TABLE
postgres=# create function new_example() RETURNS trigger AS $$
DECLARE
BEGIN
PERFORM pg_notify('example', 'id: ' || NEW.id || ' name: ' || NEW.name);
RETURN new;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# create trigger new_ex AFTER INSERT ON example FOR EACH ROW EXECUTE PROCEDURE new_example();
CREATE TRIGGER
postgres=# LISTEN example;
LISTEN
postgres=# INSERT into example(name) VALUES ('a');
INSERT 0 1
Asynchronous notification "example" with payload "id : 1 name: a" received from server process with PID 22349.
這是正確的 - 我已經插入一個新的行和通知正是我期待
postgres=# INSERT into example(name) VALUES (NULL);
INSERT 0 1
Asynchronous notification "example" received from server process with PID 22349.
這沒有任何意義。我會期望像Asynchronous notification "example" with payload "id : 1 name: NULL" received from server process with PID 22349.
或Asynchronous notification "example" with payload "id : 1 name:" received from server process with PID 22349.
我該怎麼做錯了?
非常感謝 - 實際上它將被一個nodejs應用程序使用的通知,所以我認爲我會使用'COALESCE(NEW.description,'')',我會考慮''''as在nodejs端爲NULL – rpadovani