2014-11-26 14 views
9

के लिए डेटाबेस कार्य बनाएं/ड्रॉप करें मेरे पास एक Express.js वेब अनुप्रयोग है जो SQL क्वेरी बिल्डर और माइग्रेशन इंजन के रूप में Knex.js का उपयोग करता है। जबकि Knex.js में टेबल बनाने, छोड़ने और बदलने के तरीके हैं, लेकिन इसमें डेटाबेस बनाने/छोड़ने के तरीके नहीं हैं।gulp/knex

मैं सोच रहा था कि Knex.js या यहां तक ​​कि एक गल्प कार्य के लिए कोई एक्सटेंशन है जो आपको डेटाबेस बनाने/छोड़ने की अनुमति देता है। मुझे कोई नहीं मिला। मैं एक PostgreSQL डेटाबेस का उपयोग कर रहा हूँ।

उत्तर

15

मैं PostgreSQL बारे में निश्चित नहीं हूँ, लेकिन मैं MySQL के साथ एक ही समस्या मारा। मैंने पाया कि आप डेटाबेस चुनने के बिना कनेक्ट करने के लिए knex का उपयोग कर सकते हैं, कच्चे SQL के साथ डेटाबेस बना सकते हैं, फिर नए डेटाबेस का चयन फिर से कनेक्ट कर सकते हैं।

यहाँ एक स्टैंड-अलोन स्क्रिप्ट है कि एक एकल-स्तंभ तालिका के साथ एक नया डेटाबेस बनाता है:

var conn = { 
 
    host  : '127.0.0.1', 
 
    user  : 'user', 
 
    password : 'pass', 
 
    charset : 'utf8' 
 
}; 
 

 
// connect without database selected 
 
var knex = require('knex')({ client: 'mysql', connection: conn}); 
 

 
knex.raw('CREATE DATABASE my_database') 
 
    .then(function(){ 
 
    knex.destroy(); 
 
    
 
    // connect with database selected 
 
    conn.database = 'my_database'; 
 
    knex = require('knex')({ client: 'mysql', connection: conn}); 
 

 
    knex.schema.createTable('my_table', function (table) { 
 
     table.string('my_field'); 
 
    }) 
 
    .then(function() { 
 
     knex.destroy(); 
 
    }); 
 
    });

यह (अब के लिए मेरे लिए काफी अच्छी तरह से) काम करता है, लेकिन मैं कर रहा हूँ अन्य समाधानों को सुनने में रूचि है।

+0

एक दिलचस्प दिशा की तरह लगता है। PostgreSQL के लिए इसे जांच लेंगे। – ifeins

+7

postgresql के लिए यह एक डिफ़ॉल्ट डेटाबेस के लिए पूछेगा, आप केवल पोस्टग्रेज़ को डिफ़ॉल्ट डेटाबेस के रूप में उपयोग कर सकते हैं। –

2

आप जोड़ सकते हैं https://www.npmjs.org/package/gulp-shell

यह काम करना चाहिए:

var gulp = require('gulp') 
 
var shell = require('gulp-shell') 
 

 
gulp.task('example', function() { 
 
    return gulp.src('*.js', {read: false}) 
 
    .pipe(shell([ 
 
     'psql DROP DATABASE dbname;', 
 
     'psql CREATE DATABASE dbname;' 
 
    ], { 
 
     templateData: { 
 
     f: function (s) { 
 
      return s.replace(/$/, '.bak') 
 
     } 
 
     } 
 
    })) 
 
})

+1

यह काम करेगा, लेकिन मैं खोल को छोड़ दिए बिना समाधान की तलाश में हूं। मुझे लगता है कि "पीजी" एनपीएम पैकेज का उपयोग करना संभवतः संभव है। दयालुता कि knex CREATE/DROP डेटाबेस आदेशों का समर्थन नहीं करता है। – ifeins

2
var knex = require('knex')({ 
    client: 'pg', 
    connection: { 
    host: HOST, 
    user: USERNAME, 
    password: PASSWORD, 
    database: 'postgres', 
    charset: 'utf8' 
    } 
}); 

knex.raw('CREATE DATABASE DB_NAME;') 
    .then(function() { 
    return knex.raw('DROP DATABASE DB_NAME;') 
    }) 
    .finally(function() { 
    console.log("Done"); 
    });