diff --git a/lib/discovery.js b/lib/discovery.js index 386d3b1f..b80900fe 100644 --- a/lib/discovery.js +++ b/lib/discovery.js @@ -189,17 +189,13 @@ function mixinDiscovery(PostgreSQL) { // http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getPrimaryKeys(java.lang.String, java.lang.String, java.lang.String) /* - select tc.table_schema, tc.table_name, kc.column_name - from - information_schema.table_constraints tc - join information_schema.key_column_usage kc - on kc.table_name = tc.table_name and kc.table_schema = tc.table_schema - where - tc.constraint_type = 'PRIMARY KEY' - and kc.position_in_unique_constraint is not null - order by tc.table_schema, - tc.table_name, - kc.position_in_unique_constraint; + SELECT kc.table_schema AS "owner", kc.table_name AS "tableName", + kc.column_name AS "columnName", kc.ordinal_position AS "keySeq", + kc.constraint_name AS "pkName" FROM information_schema.key_column_usage kc + JOIN information_schema.table_constraints tc ON kc.table_name = tc.table_name + AND kc.table_schema = tc.table_schema AND kc.constraint_name = tc.constraint_name + WHERE tc.constraint_type='PRIMARY KEY' AND kc.table_name='inventory' + ORDER BY kc.table_schema, kc.table_name, kc.ordinal_position */ /*! @@ -210,11 +206,14 @@ function mixinDiscovery(PostgreSQL) { */ function queryForPrimaryKeys(owner, table) { var sql = 'SELECT kc.table_schema AS "owner", ' - + 'kc.table_name AS "tableName", kc.column_name AS "columnName", kc.ordinal_position AS "keySeq", kc.constraint_name AS "pkName" FROM' + + 'kc.table_name AS "tableName", kc.column_name AS "columnName",' + + ' kc.ordinal_position AS "keySeq",' + + ' kc.constraint_name AS "pkName" FROM' + ' information_schema.key_column_usage kc' + ' JOIN information_schema.table_constraints tc' + ' ON kc.table_name = tc.table_name AND kc.table_schema = tc.table_schema' - + ' WHERE tc.constraint_type=\'PRIMARY KEY\' AND kc.position_in_unique_constraint IS NOT NULL'; + + ' AND kc.constraint_name = tc.constraint_name' + + ' WHERE tc.constraint_type=\'PRIMARY KEY\''; if (owner) { sql += ' AND kc.table_schema=\'' + owner + '\''; diff --git a/test/postgresql.discover.test.js b/test/postgresql.discover.test.js index 3a89781d..cc90dc58 100644 --- a/test/postgresql.discover.test.js +++ b/test/postgresql.discover.test.js @@ -117,8 +117,11 @@ describe('Discover model primary keys', function () { done(err); } else { models.forEach(function (m) { - // console.dir(m); - assert(m.tableName === 'product'); + assert.deepEqual(m, { owner: 'strongloop', + tableName: 'product', + columnName: 'id', + keySeq: 1, + pkName: 'product_pkey' }); }); done(null, models); }