में EXECUTE का उपयोग कर जेनेरिक ट्रिगर से * मेरे पास पोस्टग्रेस "विभाजन" सुविधा का उपयोग करने वाली कई टेबल हैं। मैं प्रत्येक तालिका पर पंक्ति ट्रिगर के सामान्य से पहले एक सामान्य परिभाषित करना चाहता हूं जो 1) गतिशील रूप से विभाजन को मूल तालिका के विरुद्ध डालने चाहिए और 2) विभाजन के खिलाफ सम्मिलन को फिर से निष्पादित करना चाहिए।नया डालने। * पीएल/pgsql
कुछ की तरह:
CREATE OR REPLACE FUNCTION partition_insert_redirect()
RETURNS trigger AS $BODY$
BEGIN
... create the new partition and set up the redirect Rules ...
/* Redo the INSERT dynamically. The new RULE will redirect it to the child table */
EXECUTE 'INSERT INTO ' || quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
' SELECT NEW.*'
END
लेकिन "नई" रिकॉर्ड निष्पादित एसक्यूएल अंदर दिखाई नहीं देता है। मैं इस काम को यथासंभव सरल कैसे बना सकता हूं?
एक विकल्प के रूप में, क्या मैं किसी भी तरह के नए रिकॉर्ड में फ़ील्ड पर फिर से शुरू कर सकता हूं?
मैं एक अस्थायी तालिका का उपयोग करने का सोचा है:
EXECUTE 'CREATE TEMPORARY TABLE new_row (LIKE ' ||
quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
') ON COMMIT DROP';
INSERT INTO new_row SELECT NEW.*;
EXECUTE 'INSERT INTO ' || quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
' SELECT * FROM new_row';
DROP TABLE new_row;
लेकिन यह भी एक अस्थायी-मेज पर कैश की गई संदर्भ की वजह से काम नहीं करता है: Why do I get "relation with OID ##### does not exist" errors when accessing temporary tables in PL/PgSQL functions?
मैं Postgres उपयोग कर रहा हूँ 8.2 और मैं किसी अन्य संस्करण में नहीं बदल सकता।
संपादित करें:
रूप @alvherre ने कहा, यह शायद Postgres 8.4 निष्पादित ... का उपयोग वाक्य रचना के साथ किया जा सकता है। http://wiki.postgresql.org/wiki/PL/pgSQL_Dynamic_Triggers
संबंधित बाद में सवाल समाधान के साथ Postgres 8.2 के लिए: http: // stackoverflow। कॉम/क्यू/751 9 044/9 3 9 860 –
@ एरविन ब्रैंडस्टेटर: संबंधित प्रश्न में आपका समाधान नीचे दिए गए मेरे उत्तर में इस समस्या को हल करने के समान है, लेकिन इस मामले में, प्रत्येक बार तालिका में नया विभाजन जोड़ा जाने पर फ़ंक्शन को फिर से सम्मिलित किया जाना चाहिए या अन्यथा फ़ंक्शन अद्यतन विभाजन नियमों से अवगत नहीं होगा। –