0

最近、私はportgresのパーティションテーブルを使って作業しました。 INSERT RETURNING idについていくつか問題があります。INSERT RETURNINGとパーティショニングPOSTGRESSQL

CREATE OR REPLACE FUNCTION f_port_vessels_insert_trigger_auto() 
    RETURNS TRIGGER AS $$ 
DECLARE 
    insert_sql TEXT; 
    week_num INTEGER; 
    year_num INTEGER; 
    partition_table VARCHAR; 
    prefix_partition_table VARCHAR :='port_vessels_p_'; 
BEGIN 
    SELECT CAST (EXTRACT(WEEK FROM NEW.created_at) AS INTEGER) INTO week_num; 
    SELECT CAST (EXTRACT(YEAR FROM NEW.created_at) AS INTEGER) INTO year_num; 
    partition_table := prefix_partition_table || year_num || '_' || week_num; 
    insert_sql := 'INSERT INTO ' || partition_table || ' VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)'; 
    EXECUTE insert_sql 
    USING NEW.id, NEW.port_id, NEW.vessel_id, 
    NEW.last_position_updated_at, NEW.nav_status_code, 
    NEW.created_at, NEW.updated_at, NEW.berth_id, 
    NEW.berth_shift_id; 
    RETURN NULL; 
END; 
$$ 
LANGUAGE plpgsql; 

CREATE TRIGGER f_port_vessels_insert_trigger 
BEFORE INSERT ON port_vessels 
FOR EACH ROW EXECUTE PROCEDURE f_port_vessels_insert_trigger_auto(); 

私はそれらのすべてをグーグル、溶液はビューの作成を参照してください、テーブルの代わりにトリガーinsert instead on the viewを作成しました:これは私のトリガ機能とトリガです。私はdbだけで作業しても問題ないと思いますが、Active Record in Railsを使用しています。私のモデルをもっと変更したくないので、誰もこの状況を経験していますか?または、これを解決する別の方法があります。

答えて

関連する問題