Þegar við höfum sett upp postgres á vélinni okkar gætum við lent í vandræðum við að tengjast. Helst er það tengt auðkenningu okkar við postgres. Tek það fram að ég (Óli) er engin sérfræðingur í notendaumsjón postgres gagnagrunna.
Í byrjun er einn notandi uppsettur, annað hvort með notendanafnið postgres
eða nafn þess notanda sem skráður er inn (t.d. osk
)
- Á windows er beðið um lykilorð fyrir
postgres
notanda í uppsetningu - Á linux er
postgres
notandi til staðar en það er ekki hægt að tengjast með honum - Á mac, ef postgres er sett upp með
brew install postgresql
heitir notandinn sama og innskráður notandi
Til þess að tengjast er hægt að nota psql
CLI forrit:
> psql -d postgres
# eða
> psql <username> -h 127.0.0.1 -d postgres
# eða
> psql username -h localhost -d postgres
# eða
> psql -U postgres -W # og gefa upp lykilorð frá því við uppsetningu á Windows
Á Windows gæti verið að psql
sé ekki í PATH, það er hægt að gera í gegnum Settings > System
, sjá svar á superuser.com. Aftast í PATH þarf að setja slóð á bin
möppu innan postgres
möppu, t.d. ;C:\Program Files\PostgreSQL\10\bin
. Þá er hægt að keyra psql
án þess að fá 'psql' is not recognized as an internal or external command
villu.
Eftir að komist er inn með psql
er hægt að athuga hvaða notendur eru til staðar:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
osk | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Þá getum við útbúið gagnagrunn (t.d. v2
) og notanda (t.d. notandi
) fyrir grunninn sem við vitum að hefur aðgang:
postgres=# CREATE USER notandi;
CREATE ROLE
postgres=# CREATE DATABASE v2;
CREATE DATABASE
psql=# GRANT ALL PRIVILEGES ON DATABASE v2 TO notandi;
GRANT
Við getum þá hætt í psql og loggað okkur aftur inn sem nýr notandi, búið til töflu og bætt við hana:
psql=# \q
> psql -U notandi -d v2
psql=# CREATE TABLE test (
id serial primary key,
text varchar(64) not null
);
CREATE TABLE
postgres=> INSERT INTO test (text) VALUES ('foo');
INSERT 0 1
postgres=> SELECT * FROM test;
id | text
----+------
1 | foo
(1 row)
Ef við tengjumst nú frá node þurfum við að byrja á útbúa möppu og sækja pg
pakkann:
> cd postgres-test
> npm init -y
> npm install pg --save
Ef við búum nú til skrá index.js
:
const { Client } = require('pg')
const connectionString = 'postgres://notandi:@localhost/v2';
const client = new Client({ connectionString });
client.connect();
client.query('SELECT * FROM test;', (err, res) => {
if (err) {
console.error(err);
} else {
console.log(res.rows);
}
client.end();
});
og keyrum:
> node index.js
[ anonymous { id: 1, text: 'foo' } ]
Við höfum nokkrar leiðir til að tengjast postgres en kosturinn við að nota tengistreng (connection string) er að við notum þannig þegar við setjum upp gagnagrunn á Heroku. Tengistrengur að ofan er jafngildur eftirfarandi, þar sem tengistrengur er URI (þar sem eftir skema kemur username:password@
):
const client = new Client({
user: 'notandi',
host: 'localhost',
database: 'v2',
password: '',
})
Í einhverjum tilfellum þarf að gefa notanda lykilorð eða setja gildistíma á notanda. Hægt er að gera þegar notandi er búinn til:
postgres=# CREATE USER foo WITH PASSWORD 'bar' VALID UNTIL 'infinity';
CREATE ROLE
eða breyta notanda sem nú þegar er til:
postgres=# ALTER USER notandi SET PASSWORD = 'bar';
ALTER ROLE
postgres=# ALTER USER notandi VALID UNTIL 'infinity';
ALTER ROLE
Ef notandi hefur lykilorð verður að breyta tengistreng t.d. í 'postgres://notandi:foo@localhost/v2'
Lentir þú í frekari vandræðum og fannst út úr þeim? Bættu veseni og lausn við með pull request eða láttu Óla vita á slack.