Database di Azure per PostgreSQL: usare Node.js per connettersi ai dati ed eseguire query

Questa guida introduttiva illustra come connettersi a un database di Azure per PostgreSQL usando Node.js dalle piattaforme Windows, Ubuntu Linux e Mac. Spiega come usare le istruzioni SQL per eseguire query, inserire, aggiornare ed eliminare dati nel database. Le procedure descritte in questo articolo presuppongono che si abbia familiarità con lo sviluppo con Node.js, ma non con Database di Azure per PostgreSQL.

Prerequisiti

Questa guida introduttiva usa le risorse create in una delle guide seguenti come punto di partenza:

È anche necessario:

Installare il client pg

Installare pg, ovvero un client JavaScript puro che non causa blocchi per node.js, utile per connettersi ed eseguire query in PostgreSQL.

A tale scopo, eseguire Node Package Manager (npm) per JavaScript dalla riga di comando per installare il client pg.

npm install pg

Verificare l'installazione elencando i pacchetti installati.

npm list

L'output del comando list conferma la versione di ogni componente.

`-- pg@6.2.3
  +-- buffer-writer@1.0.1
  +-- packet-reader@0.3.1
etc...

Ottenere informazioni di connessione

Ottenere le informazioni di connessione necessarie per connettersi al database di Azure per PostgreSQL. Sono necessari il nome del server completo e le credenziali di accesso.

  1. Accedere al Portale di Azure.
  2. Nel menu a sinistra nel portale di Azure fare clic su Tutte le risorse e cercare il server appena creato, mypgserver-20170401.
  3. Fare clic sul nome del server mypgserver-20170401.
  4. Selezionare la pagina Panoramica del server. Annotare il Nome server e il nome di accesso dell'amministratore del server. Database di Azure per PostgreSQL - Accesso dell'amministratore del server
  5. Se si dimenticano le informazioni di accesso per il server, passare alla pagina Panoramica per visualizzare il nome di accesso dell'amministratore del server e, se necessario, reimpostare la password.

Esecuzione del codice JavaScript in Node.js

È possibile avviare Node.js dalla shell di Bash o dal prompt dei comandi di Windows digitando node, quindi eseguire l'esempio di codice JavaScript in modo interattivo copiandolo e incollandolo nel prompt. In alternativa è possibile salvare il codice JavaScript in un file di testo e avviare node filename.js con il nome del file come parametro per l'esecuzione.

Connettersi, creare tabelle e inserire dati

Usare il codice seguente per connettersi e caricare i dati usando le istruzioni SQL CREATE TABLE e INSERT INTO. L'oggetto pg.Client viene usato per l'interfaccia con il server PostgreSQL. La funzione pg.Client.connect() viene usata per stabilire la connessione al server. La funzione pg.Client.query() viene usata per eseguire la query SQL sul database PostgreSQL.

Sostituire i parametri host, dbname, user e password con i valori specificati al momento della creazione del server e del database.

const pg = require('pg');

const config = {
    host: 'mypgserver-20170401.postgres.database.azure.com',
    user: 'mylogin@mypgserver-20170401',
    password: '<server_admin_password>',
    database: '<name_of_database>',
    port: 5432,
    ssl: true
};

const client = new pg.Client(config);

client.connect(err => {
    if (err) throw err;
    else {
        queryDatabase();
    }
});

function queryDatabase() {
    const query = `
        DROP TABLE IF EXISTS inventory;
        CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);
        INSERT INTO inventory (name, quantity) VALUES ('banana', 150);
        INSERT INTO inventory (name, quantity) VALUES ('orange', 154);
        INSERT INTO inventory (name, quantity) VALUES ('apple', 100);
    `;

    client
        .query(query)
        .then(() => {
            console.log('Table created successfully!');
            client.end(console.log('Closed client connection'));
        })
        .catch(err => console.log(err))
        .then(() => {
            console.log('Finished execution, exiting now');
            process.exit();
        });
}

Leggere i dati

Usare il codice seguente per connettersi e leggere i dati usando un'istruzione SQL SELECT. L'oggetto pg.Client viene usato per l'interfaccia con il server PostgreSQL. La funzione pg.Client.connect() viene usata per stabilire la connessione al server. La funzione pg.Client.query() viene usata per eseguire la query SQL sul database PostgreSQL.

Sostituire i parametri host, dbname, user e password con i valori specificati al momento della creazione del server e del database.

const pg = require('pg');

const config = {
    host: 'mypgserver-20170401.postgres.database.azure.com',
    user: 'mylogin@mypgserver-20170401',
    password: '<server_admin_password>',
    database: '<name_of_database>',
    port: 5432,
    ssl: true
};

const client = new pg.Client(config);

client.connect(err => {
    if (err) throw err;
    else { queryDatabase(); }
});

function queryDatabase() {

    console.log(`Running query to PostgreSQL server: ${config.host}`);

    const query = 'SELECT * FROM inventory;';

    client.query(query)
        .then(res => {
            const rows = res.rows;

            rows.map(row => {
                console.log(`Read: ${JSON.stringify(row)}`);
            });

            process.exit();
        })
        .catch(err => {
            console.log(err);
        });
}

Aggiornare i dati

Usare il codice seguente per connettersi e leggere i dati usando un'istruzione SQL UPDATE. L'oggetto pg.Client viene usato per l'interfaccia con il server PostgreSQL. La funzione pg.Client.connect() viene usata per stabilire la connessione al server. La funzione pg.Client.query() viene usata per eseguire la query SQL sul database PostgreSQL.

Sostituire i parametri host, dbname, user e password con i valori specificati al momento della creazione del server e del database.

const pg = require('pg');

const config = {
    host: 'mypgserver-20170401.postgres.database.azure.com',
    user: 'mylogin@mypgserver-20170401',
    password: '<server_admin_password>',
    database: '<name_of_database>',
    port: 5432,
    ssl: true
};

const client = new pg.Client(config);

client.connect(err => {
    if (err) throw err;
    else {
        queryDatabase();
    }
});

function queryDatabase() {
    const query = `UPDATE inventory 
                   SET quantity= 1000 WHERE name='banana';`;

    client
        .query(query)
        .then(() => {
            console.log('Update completed succesfully!');
            client.end(console.log('Closed client connection'));
        })
        .catch(err => console.log(err))
        .then(() => {
            console.log('Finished execution, exiting now');
            process.exit();
        });
}

Eliminare i dati

Usare il codice seguente per connettersi e leggere i dati usando un'istruzione SQL DELETE. L'oggetto pg.Client viene usato per l'interfaccia con il server PostgreSQL. La funzione pg.Client.connect() viene usata per stabilire la connessione al server. La funzione pg.Client.query() viene usata per eseguire la query SQL sul database PostgreSQL.

Sostituire i parametri host, dbname, user e password con i valori specificati al momento della creazione del server e del database.

const pg = require('pg');

var config =
{
    host: 'mypgserver-20170401.postgres.database.azure.com',
    user: 'mylogin@mypgserver-20170401',
    password: '<server_admin_password>',
    database: 'mypgsqldb',
    port: 5432,
    ssl: true
};

const client = new pg.Client(config);

client.connect(function (err)
{
    if (err)
        throw err;
    else
    {
        queryDatabase();
    }   
});

function queryDatabase()
{
    client.query('DELETE FROM inventory WHERE name=\'apple\';', function (err, result)
    {
        console.log("Connection established");

        if (err)
            throw err;
        else
        {
            client.end(function (err)
            {
                if (err)
                    throw err;

                // Else closing connection finished without error
                console.log("Closed client connection");
            });

            console.log("Finished execution, exiting now");
            process.exit()          
        }
    }); 
}

Passaggi successivi