2017-03-06 5 views
2

テーブルに存在するテーブルを検出するにはどうしたらいいですか? が好きではないされていますCloud Spanner APIを介してテーブルが存在するかどうかを確認できますか? (Node.js内)

database.exist('some table name') 

を、私は私の関数を書く:

const queryTableExist = (tableName) => { 
    return { 
     sql: `SELECT t.table_name FROM information_schema.tables AS t WHERE t.table_catalog = '' and t.table_schema = '' and t.table_name='${tableName}'` 
    }; 
}; 
let tableExist = (tableName, cb) => { 
    const query = queryTableExist(tableName); 
    database.run(query, (err, rows) => { 
     if (err) { 
      console.log(`${err}\n${query}`); 
      cb(err); 
     } 

     cb(err, rows.length > 0); 
    }) 
}; 

は、他のアイデアはありますか?あなたはgoogle-cloud-nodeクライアントライブラリとCloud Spannerパッケージを使用していると仮定すると、

答えて

1

あなたはコールコールtable.create(どちらか缶)とエラーを処理:

var schema = 
    'CREATE TABLE Singers (' + 
    ' SingerId INT64 NOT NULL,' + 
    ' FirstName STRING(1024),' + 
    ' LastName STRING(1024),' + 
    ' SingerInfo BYTES(MAX),' + 
    ') PRIMARY KEY(SingerId)'; 

table.create(schema, function(err, table, operation, apiResponse) { 
    if (err) { 
    // Error handling omitted. 
    } 

    operation 
    .on('error', function(err) {}) 
    .on('complete', function() { 
     // Table created successfully. 
    }); 
}); 

それとも、取得しようとすることができますテーブルを参照し、その後、nullオブジェクトをチェック:

var instance = spanner.instance('my-instance'); 
var database = instance.database('my-database'); 
var table = database.table('my-table'); 
+0

感謝を存在するかどうかを確認してください

SELECT t.table_name FROM information_schema.tables AS t WHERE t.table_catalog = '' AND t.table_schema = '' 

を存在するすべてのテーブルを取得し、あなたの答えを取得しますあなたは... @Dominic Preuss 'var table = database.table(' my-table ');' これは決してnullを返しません - 私はバグかもしれないと理解していました。 NULLを返さないうちに私の方法はより良いと思います。 – Chipintoza

+0

ここでは2番目の解決策は動作しません。 'database.table(...)'を呼び出すときにAPIコールはありません。 –

0

私はこれを行うための最善の方法は、データベースからDDLを要求し、かどうかを確認することだと思います正規表現とCREATE TABLE <your-table-name-here> (...声明:

var instance = spanner.instance('my-instance'); 
var database = instance.database('my-database'); 

function databaseHasTable(database, tableName) { 
    return database.getSchema().then(function (data) { 
    var statements = data[0]; 
    var matcher = new RegExp('^create table ' + tableName + ' \\(', 'i'); 
    var results = statements.filter(function (item) { 
     return matcher.test(item); 
    }); 
    return results.length == 1; 
    }); 
} 

// This should print out true or false depending on the table being there. 
databaseHasTable(database, 'my-table').then(console.log); 
1

Google Spanner APIは、現在存在しているテーブルを発見するexists機能をサポートしていません。だからあなたは今あなた自身でそれを照会する必要があります。

最高性能の道

特定のテーブルが

SELECT 
    t.table_name 
FROM 
    information_schema.tables AS t 
WHERE 
    t.table_catalog = '' AND t.table_schema = '' AND 
    t.table_name = 'yourTableNameA' OR 
    t.table_name = 'yourTableNameB' OR 
    t.table_name = 'yourTableNameC' 
関連する問題