node.jsからPostgresqlを使ってみました

普段DBはPostgresqlを使っています。

MySQLはほぼWordPressのときのみ(^^;

今回はnode.jsからPostgreSQLを使ってみました。

インターフェースをインストールします。

$ npm install pg
exapp@0.0.0 /home/vagrant/nodej/exapp
└─┬ pg@6.1.5
├── buffer-writer@1.0.1
├── packet-reader@0.2.0
├── pg-connection-string@0.1.3
├─┬ pg-pool@1.7.1
│ ├── generic-pool@2.4.3
│ └── object-assign@4.1.0
├─┬ pg-types@1.11.0
│ ├── ap@0.2.0
│ ├── postgres-array@1.0.2
│ ├── postgres-bytea@1.0.0
│ ├── postgres-date@1.0.3
│ └─┬ postgres-interval@1.0.2
│ └── xtend@4.0.1
├─┬ pgpass@1.0.1
│ └─┬ split@1.0.0
│ └── through@2.3.8
└── semver@4.3.2

テスト用のテーブルを作成します。

-bash-4.2$ createuser -P datauser
Enter password for new role: datapass
Enter it again:
Password: postgresのパスワード

postgres=# \du
List of roles
Role name | Attributes | Member of
———–+————————————————————+———–
datauser | | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

-bash-4.2$ createdb test_db -O datauser
Password:
-bash-4.2$ psql -l
Password:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+——-+———————–
postgres | postgres | UTF8 | C | C |
tdetestdb | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
test_db | datauser | UTF8 | C | C |
(5 rows)

-bash-4.2$ psql -U datauser test_db
Password for user datauser:
test_db=> create table mydata (
test_db(> id serial primary key,
test_db(> name varchar(50),
test_db(> mail varchar(100),
test_db(> memo varchar(255)
test_db(> );
CREATE TABLE
test_db=> \dp
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
——–+—————+———-+——————-+——————-+———-
public | mydata | table | | |
public | mydata_id_seq | sequence | | |
(2 rows)

test_db=> \d
List of relations
Schema | Name | Type | Owner
——–+—————+———-+———-
public | mydata | table | datauser
public | mydata_id_seq | sequence | datauser
(2 rows)

サンプルソースです

create.js

  var express = require('express');
  var router = express.Router();
  var pg = require('pg');

  /* create page */
  router.post( '/', function(req, res, next) {
    var name_str = req.body["name"];
    var mail_str = req.body["mail"];
    var memo_str = req.body["memo"];

    var con = "tcp://datauser:datapass@localhost:5432/test_db";
    pg.connect( con, function( err, client ) {
      var qstr = "insert into mydata( name, mail, memo ) values ( $1, $2, $3 )";
      var query = client.query( qstr, [name_str, mail_str, memo_str]);
      query.on( 'end', function( row, err ) {
        res.redirect( "/" );
      });
      query.on( 'error', function( error ) {
        console.log( "ERROR!" );
        res.render( 'index', {
          title: "ERROR",
          data: null,
          message: "ERROR is occured!"
        });
      });
    });
  });

module.exports = router;

SQLをそのまま使えるのがありがたいかもです(^^;
ORマッパーはあるのかな???

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です