2010-09-21 26 views
40

मैं Postgres उपयोग कर रहा हूँ, और मैं पंक्तियाँ, कि केवल एक पूर्णांक है कि वृद्धि की जाती है के मामले में अलग डेटाबेस में सम्मिलित किया जा करने की जरूरत है कि की एक बड़ी संख्या है। क्षमा करें कि एक मूर्ख सवाल क्या हो सकता है, लेकिन मैं डेटाबेस गुरु का अधिक नहीं हूं। क्या यह सीधे एक SQL क्वेरी दर्ज करना संभव है जो पंक्तियों को प्रोग्रामिक रूप से सम्मिलित करने के लिए लूप का उपयोग करेगा? मुझे क्या करना है कोशिश कर रहा हूँ की छद्म कोड मेंडेटाबेस में पंक्तियों को सम्मिलित करने के लिए लूप के लिए SQL का उपयोग कैसे करें?

उदाहरण:

for i in 1..10000000 LOOP 
    INSERT INTO articles VALUES(i) 
end loop; 
+0

यह जानने में मदद करेगा कि आप PostgreSQL का किस संस्करण का उपयोग कर रहे हैं। –

+0

@OMG Ponies PostgreSQL 8.3 –

+1

आपको एक लूप का उपयोग करने की आवश्यकता है - उदाहरण देखें: http://www.linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x20238_002.htm –

उत्तर

60

उम्मीद है कि मैं समझ लिया है कि तुम क्या जरूरत है (8.2 पर परीक्षण किया):

INSERT INTO articles (id, name) 
SELECT x.id, 'article #' || x.id 
    FROM generate_series(1,10000000) AS x(id); 
+0

धन्यवाद। मुझे अपनी सभी भूमिकाओं के लिए अनुमति जोड़नी पड़ी, तो मैं था: ROLE_PERM में डालने (ROLE_ID, PERMISSION_ID) \t ROLE_ID, 722 का चयन ROLE_ID द्वारा भूमिका आदेश से; –

3

AFAIK, तो आप सीधे एसक्यूएल के रूप में एक पाश नहीं लिख सकते हैं, तो आप एक stored procedure बनाने के लिए यह करने के लिए होगा ।

यह हालांकि करना होगा (लेकिन किसी शायद यह क्लीनर कर सकते हैं)

INSERT INTO articles WITH RECURSIVE i AS 
(
SELECT 1 x 
    UNION ALL 
SELECT x + 1 
    FROM i 
WHERE x < 10000000 
) 
SELECT x 
FROM i; 
+0

[12+ के साथ रिकर्सिव है] (http://www.postgresql.org/docs/8.4/static/queries-with.html), लेकिन वहां [INSERT कथन में इसका समर्थन करने के बारे में प्रलेखन में कुछ भी नहीं है] (http : //www.postgresql.org/docs/9.0/static/sql-insert.html)। जरूरी है कि निश्चित नहीं है ... –

+0

ओपी v8.3 का उपयोग कर पुष्टि की है, :( –

15

एसक्यूएल सर्वर में आप कर सकते हैं:

DECLARE @i int 
SET @i = 1 

WHILE @i<1000000 
    BEGIN 
     INSERT INTO articles 
     VALUES @i 
     SET @[email protected]+1 
    END 
+0

किसी के साथ पुनरावर्ती उपयोग नहीं कर सकते OMGPonies अगर यह postgre में काम करेंगे – JNK

+0

मेरे pgPLSQL कमजोर है हमें बता सकते हैं की तरह है, लेकिन: http: // www। linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x20238_002.htm मैं पुनरावर्ती का उपयोग करेंगे यदि संभव हो तो साथ (जैसे आप ओपन स्कूल 'जवाब में देखें), लेकिन मैं तो परीक्षण करने के लिए ऐसा लगता है कि एक पाश के लिए आवश्यक है एक उदाहरण की जरूरत नहीं है (8.4 से पहले, कम से कम)। लेकिन PostgreSQL v9 के साथ अज्ञात pgPLSQL ब्लॉक जोड़ना (अंत में, डॉनो कितना लंबा ओरेकल समर्थित है), यह एक बार उपयोग के लिए आसान है। –

संबंधित मुद्दे

 संबंधित मुद्दे