Skip to content

Latest commit

 

History

History
263 lines (185 loc) · 5.42 KB

03.2.postgres.md

File metadata and controls

263 lines (185 loc) · 5.42 KB

Fyrirlestur 3.1 — Postgres

Vefforritun 2 — HBV403G

Ólafur Sverrir Kjartansson, [email protected]


  • Eða bara postgres
  • Open source gagnagrunnur sem er mjög útbreiddur og mikið notaður
  • Object-relational database management system (ORDBMS), styður classes, erfðir beint
  • ACID og útfærir mest allan SQL staðalinn

Postgres týpur


Postgres – uppsetning


psql


pgAdmin


Búa til töflu (create table)

CREATE TABLE texts(
  id serial primary key,
  name varchar(64) not null,
  text text,
  date timestamp with time zone not null default current_timestamp
);

Bæta við töflu (insert)

INSERT INTO texts
  (name, text)
VALUES
  ('Jón Jónsson', 'Halló heimur!');

Velja úr töflu (select)

SELECT * FROM texts;
 id |    name     |     text      |             date
----+-------------+---------------+-------------------------------
  1 | Jón Jónsson | Halló heimur! | 2018-01-25 12:45:06.41663+00
(1 rows)

Uppfæra töflu (update)

UPDATE texts SET NAME = 'Óli' WHERE id = 1;
UPDATE 1

Eyða úr töflu (delete)

DELETE FROM texts WHERE id = 1;
DELETE 1

CRUD

  • Þetta samansafn af aðgerðum kallast oftast CRUD
    • Create (þá INSERT)
    • Read
    • Update
    • Delete

Postgres og Node.js

  • node-postgres er hrein JavaScript útfærsla af PostgresSQL client
  • npm install --save pg
  • Callback og promise viðmót
  • Styður prepared statements sem við notum alltaf til að minnka líkur á SQL injection árásum

Tengjast gagnagrunni

Ef við höfum keyrandi gagnagrunn á vél getum við tengst á nokkra vegu

  • Útbúa nýjan Client og gefa upplýsingar um tengingu
  • Tengjast með connection streng, URI sem skilgreinir upplýsingar um hvernig tengjast skuli
    • Hentugt þar sem allar upplýsingar eru í einum streng
  • Útbúa connection pool og tengjast gegnum hann
    • Æskilegt fyrir vefforrit sem opna margar gagnagrunnstengingar

const { Client } = require('pg')

const client = new Client({
  user: '',
  host: 'localhost',
  database: 'examples',
  password: '',
})
client.connect();

client.query();

const { Client } = require('pg')

const connectionString = 'postgres://:@localhost/examples';

const client = new Client({
  connectionString,
})
client.connect();

client.query();

const { Pool, Client } = require('pg')

const connectionString = 'postgres://:@localhost/examples';

const pool = new Pool({
  connectionString,
});

pool.query();

Callback select

client.query('SELECT * FROM texts', (err, res) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log(res.rows);
  client.end();
});

Promise select

client.query(query, values)
  .then(res => {
    console.log(res.rows);
    client.end();
  })
  .catch(e => {
    console.error(err);
    client.end();
  });

async await select

async function select() {
  try {
    const res = await client.query('SELECT * FROM texts');
    console.log(res.rows);
  } catch (e) {
    console.error('Error selecting', e);
  }

  await client.end();
}

select().catch(e => console.error(e));

Parameterized insert

const query = 'INSERT INTO texts(name, text) VALUES($1, $2) RETURNING *';
const values = ['Foo', 'Foo bar'];

client.query(query, values, (err, res) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log(res.rows);
  client.end();
});

Nánar