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

फ़ंक्शन में अब () बनाम 'अब' पोस्टग्रेज करता है

यह बग नहीं है, यह एक विशेषता है... यहां दो बिंदु हैं।

  1. 'अभी' का प्रतिस्थापन

    आइए दस्तावेज़ीकरण पर एक नज़र डालें (Date /समय कार्य और ऑपरेटर ):

    तो 'now' पार्स समय पर टाइमस्टैम्प में बदल दिया जाता है।

  2. तैयार बयान

    ठीक है, लेकिन कार्यों के संबंध में इसका क्या अर्थ है? यह प्रदर्शित करना आसान है कि किसी फ़ंक्शन को हर बार कॉल करने पर उसकी व्याख्या की जाती है:

    t=# create function test() returns timestamp as $$
    begin
     return 'now';
    end;
    $$ language plpgsql;
    CREATE FUNCTION
    
    t=# select test();
               test            
    ----------------------------
     2015-12-11 11:14:43.479809
    (1 row)
    
    t=# select test();
               test            
    ----------------------------
     2015-12-11 11:14:47.350266
    (1 row)
    

    इस उदाहरण में 'now' आपकी अपेक्षा के अनुरूप व्यवहार करता है।

    क्या अंतर है? आपका फ़ंक्शन SQL कथन का उपयोग करता है, और परीक्षण() नहीं करता है। आइए फिर से दस्तावेज़ीकरण देखें (PL/ pgSQL योजना कैशिंग ):

    और यहाँ (विवरण तैयार करें ):

    इसलिए 'now' एक टाइमस्टैम्प में बदल दिया गया था जब तैयार बयान को पार्स किया गया था। आइए एक फ़ंक्शन के बाहर एक तैयार स्टेटमेंट बनाकर इसे प्रदर्शित करें:

    t=# prepare s(integer) as UPDATE test_date_bug SET date2 = 'now' WHERE id = $1;
    PREPARE
    
    t=# execute s(1);
    UPDATE 1
    t=# execute s(2);
    UPDATE 1
    
    t=# select * from test_date_bug;
     id |             date1             |             date2
    ----+-------------------------------+-------------------------------
      3 | 2015-12-11 11:01:38.491656+03 | infinity
      1 | 2015-12-11 11:01:37.91818+03  | 2015-12-11 11:40:44.339623+03
      2 | 2015-12-11 11:01:37.931056+03 | 2015-12-11 11:40:44.339623+03
    (3 rows)
    

वही हुआ। 'now' एक बार टाइमस्टैम्प में बदल दिया गया था (जब तैयार स्टेटमेंट को पार्स किया गया था), और now() दो बार बुलाया गया था।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में निम्न-स्तरीय संसाधन पूलिंग के बारे में कुछ विचार

  2. कई मामले जब एक ही पंक्ति पर आउटपुट के साथ हो

  3. BeanCreationException:'flywayInitializer' नाम से बीन बनाने में त्रुटि

  4. पोस्टग्रेस्क्ल में पीएल/पर्ल मेल भेजें

  5. बाएँ बाहरी जुड़ाव के साथ न्यूनतम UUID का चयन कैसे करें?