PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

JPA में अपवाद PostgreSQL के लिए बीज फ़ाइल का उपयोग करते समय

समस्या सिंटैक्स नहीं थी, क्योंकि सिंटैक्स पूरी तरह से फ्लाईवे के साथ या सीधे पोस्टग्रेएसक्यूएल सीएलआई में काम कर रहा था। समस्या हाइबरनेट के साथ थी, विशेष रूप से आयात फ़ाइल को पार्स करने के साथ। हाइबरनेट जिस तरह से काम करता है वह यह है कि यह प्रत्येक अभिव्यक्ति को फाइलों से अलग-अलग निष्पादित करता है, न कि पूरी सामग्री को एक अभिव्यक्ति के रूप में। मैंने सभी फ़ंक्शन परिभाषाओं को एक पंक्ति में रखने की कोशिश की और यह काम कर गया, लेकिन यह पठनीय नहीं था। तो मैंने पाया कि हाइबरनेट के लिए यह बताने के लिए एक कॉन्फ़िगरेशन है कि अभिव्यक्ति बहु-पंक्तिबद्ध हो सकती है, लेकिन $$ बहु-पंक्ति में उपयोग किए जाने पर सीमांकक अभी भी अपरिचित था।

तो समाधान ' . के साथ कमांड को परिभाषित करना था सीमांकक और फिर एक अतिरिक्त ' . के साथ जहां आवश्यक हो एकल उद्धरणों से बचें .

समाधान spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor सेट करना है org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor का उपयोग करने के लिए . MultiLinesSqlCommandExtractor SQL एक्सप्रेशन को कई पंक्तियों से निकालता है, और अर्धविराम मौजूद होने पर रुक जाता है। वह अभिव्यक्ति का अंत है। फ़ंक्शन के बॉडी को सिंगल-कोट स्ट्रिंग में लपेटकर, हाइबरनेट उस रैपिंग को सिंगल लाइन के रूप में मानेगा।

data.sql

CREATE OR REPLACE FUNCTION insert_timeout_configuration() RETURNS bigint AS '
  DECLARE created_id bigint;

  BEGIN
    INSERT INTO timeout_configuration (id, version, timeout)
    VALUES (nextval(''my_sequence''), 0, 300)
    RETURNING id INTO created_id;
    return created_id;
  END;
' language plpgsql;

CREATE OR REPLACE FUNCTION insert_url_configuration() RETURNS bigint AS '
  DECLARE created_id bigint;

  BEGIN
    INSERT INTO url_configuration (id, version, my_url)
    VALUES (nextval(''my_sequence''), 0,''http://localhost:8080/'')
    RETURNING id INTO created_id;
    return created_id;
  END;
' language plpgsql;

DO '
      INSERT INTO global_configuration(id, version, name, timeout_configuration_id, url_configuration_id)
      VALUES (nextval(''my_sequence''), 0, ''My global config'', insert_timeout_configuration(), insert_url_configuration());

-- do some other code 
END
';
drop function insert_timeout_configuration();
drop function insert_url_configuration();

मुझे भावों में एकल-उद्धरणों से बचने के लिए हमेशा ध्यान रखना होगा, लेकिन अब मेरे पास अधिक मानव-पठनीय बीज फ़ाइल हो सकती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज डेटाबेस में सिंगल टेबल का बैकअप कैसे बनाएं?

  2. जेसन फ़ील्ड प्रकार postgresql में शून्य मानों के लिए क्वेरी कैसे करें?

  3. Django में स्कीमा का उपयोग कैसे करें?

  4. किस प्रकार के जॉइन का उपयोग करना है

  5. PostgreSQL में उपयोगकर्ता को सुपरयुसर में कैसे बदलें