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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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マッパーはあるのかな???