質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

意見交換

クローズ

1回答

917閲覧

postgres 空文字が挿入される場合、nullに自動変換されるようにしたい

k.fujisawa

総合スコア42

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2024/05/10 10:28

0

0

トリガーを使って掲題の要件を満たしました。画像を添付します。

他にいい方法はありますか?イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

#1

k.fujisawa

総合スコア42

投稿2024/05/12 17:50

少し改良できたので、追記します。

DROP TABLE IF EXISTS tbl; CREATE TABLE IF NOT EXISTS tbl (col1 char, col2 varchar, col3 text);
CREATE OR REPLACE FUNCTION fnc() RETURNS TRIGGER AS $$
DECLARE
cur CURSOR FOR SELECT key, value FROM json_each_text(to_json(NEW))
WHERE EXISTS (SELECT NULL FROM information_schema.columns
WHERE table_schema = TG_TABLE_SCHEMA AND table_name = TG_TABLE_NAME
AND column_name = key AND is_nullable = 'YES'
AND (data_type = 'character' AND trim(value) = ''
OR data_type IN ('character varying', 'text') AND value = ''));
BEGIN
FOR rec IN cur LOOP
NEW = json_populate_record(NEW, json_build_object(rec.key, NULL));
END LOOP;
RETURN NEW;
END
$$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER trg BEFORE INSERT OR UPDATE ON tbl FOR ROW EXECUTE PROCEDURE fnc();
INSERT INTO tbl VALUES ('', '', ''), (' ', ' ', ' '); SELECT COALESCE(col1, 'null'), COALESCE(col2, 'null'), COALESCE(col3, 'null') FROM tbl;

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問