2015-11-24 11 views
11

के साथ अनुक्रम प्रारंभ मान के रूप में अधिकतम कॉलम मान सेट करें मुझे आश्चर्य है कि किसी निश्चित तालिका से अधिकतम कॉलम मान प्राप्त करना संभव है और इसे शुद्ध अनुक्रम मूल्य के साथ प्रारंभ अनुक्रम मान के रूप में सेट करें। निम्नलिखित कोड काम नहीं करता है:तरल पदार्थ टैग

<property name="maxId" value="(select max(id)+1 from some_table)" dbms="h2,mysql,postgres"/> 
    <changeSet author="author (generated)" id="1447943899053-1"> 
     <createSequence sequenceName="id_seq" startValue="${maxId}" incrementBy="1"/> 
    </changeSet> 

एक त्रुटि मिल गया:

Caused by: liquibase.parser.core.ParsedNodeException: java.lang.NumberFormatException: For input string: "${m" 

मैं एक ही परिणाम के साथ select ... आदि के आसपास कोई कोष्ठकों के साथ यह कोशिश की है। तो गणना अनुक्रम मूल्य के रूप में गणना मूल्य का उपयोग करना संभव नहीं है?

+1

Postgres के लिए केवल एक चीज मैं के बारे में सोच सकते हैं अनुक्रम बनाने के लिए है, तो प्रयोग कर एक '' ' चलाने के लिए चयन setval ('id_seq' टैग है , (some_table से अधिकतम (आईडी) +1 का चयन करें)); '। –

+0

क्या आप अपनी बाकी कॉन्फ़िगरेशन फ़ाइल पोस्ट कर सकते हैं? आप किस पर्यावरण में तरल पदार्थ का उपयोग कर रहे हैं? –

+0

नॉरबर्ट, जावा 8, स्प्रिंग-बूट 1.2.6, लिक्विबेस 3.4.1, पोस्टग्रेस (9.3-1102-जेडीबीसी 41) निष्पादन के लिए और परीक्षण के लिए एच 2। – dfche

उत्तर

4

तो, इस तरह के एक समाधान मेरे लिए काम किया:

<changeSet author="dfche" id="1448634241199-1"> 
    <createSequence sequenceName="user_id_seq" startValue="1" incrementBy="1"/> 
</changeSet> 
<changeSet author="dfche" id="1448634241199-2"> 
    <sql dbms="postgresql">select setval('user_id_seq', max(id)+1) from jhi_user</sql> 
    <sql dbms="h2">alter sequence user_id_seq restart with (select max(id)+1 from jhi_user)</sql> 
</changeSet> 
संबंधित मुद्दे