列「req」を持つテーブル「xxx」があります。この列「req」では、次の方法で自動的に生成された値を常に取得したいと思います..列「req」値Ref_0001、別の挿入Ref_0002、Ref_0003の後に.... ...最初に試してみます@Craig Ringerへのソリューションthx
CREATE SEQUENCE seq_ref;
CREATE TABLE dossier
(
ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || NEXTVAL('seq_ref'),
value TEXT
);
数値をゼロで埋めたい場合は、次のようにします。
CREATE SEQUENCE seq_ref;
CREATE TABLE dossier
(
ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'),
value TEXT
);
このソリューションは、新しい行の挿入時にアプリケーションプログラムでは正常に機能しません..しかし、pgAdminを使用すると、挿入しようとすると、テーブルを更新するまで列が空になります..トリガーを操作しようとします。
私の問題を解決するために、最終的にPostgreSQLでトリガーを作成します。このフォーム Ref00001、Ref0002 ... の列 req の値を生成していますが、変更されません。それは動作しません; まだ空の列:
CREATE table test(
id serial primary key,
non varchar(12),
req varchar(12)
);
CREATE OR REPLACE FUNCTION Start_generate() RETURNS trigger AS $emp_stamp$
BEGIN
NEW.req := ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));
return null;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER Generate_ref AFTER INSERT ON test
FOR EACH ROW EXECUTE PROCEDURE Start_generate();
なぜ機能しないのかわかりません...デフォルトを追加します
NEW.req := DEFAULT ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));
そして、デフォルトでエラーがあります!
望む効果を得るにはどうすればよいですか?