快速入门:使用 Node.js 连接到 Azure Database for PostgreSQL 并查询其中的数据 - 单一服务器

适用于: Azure Database for PostgreSQL - 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 我们强烈建议升级到 Azure Database for PostgreSQL 灵活服务器。 有关迁移到 Azure Database for PostgreSQL - 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器会发生什么情况?

在本快速入门中,我们使用 Node.js 应用程序连接到 Azure Database for PostgreSQL。 同时还介绍了如何使用 SQL 语句在数据库中查询、插入、更新和删除数据。 本文中的步骤假定你熟悉如何使用 Node.js 进行开发,但不熟悉如何使用 Azure Database for PostgreSQL。

先决条件

安装 pg 客户端

安装 pg,这是 Node.js 的 PostgreSQL 客户端。

为此,请从命令行运行适用于 JavaScript 的节点包管理器 (npm),以便安装 pg 客户端。

npm install pg

通过列出已安装的包来验证安装。

npm list

获取连接信息

获取连接到 Azure Database for PostgreSQL 所需的连接信息。 需要完全限定的服务器名称和登录凭据。

  1. Azure 门户中,搜索并选择已创建的服务器(例如 mydemoserver)。

  2. 从服务器的“概览”面板中记下“服务器名称”和“管理员用户名”。 如果忘记了密码,也可通过此面板来重置密码。

    Azure Database for PostgreSQL 连接字符串

在 Node.js 中运行 JavaScript 代码

可以通过键入 node 从 bash shell、终端或 Windows 命令提示符启动 Node.js,然后以交互方式运行示例 JavaScript 代码(只需将其复制并粘贴到提示符处即可)。 也可将 JavaScript 代码保存到文本文件中,然后以文件名作为运行所需的参数来启动 node filename.js

进行连接,创建表,然后插入数据

通过以下代码进行连接,然后使用 CREATE TABLE 和 INSERT INTO SQL 语句加载数据。 pg.Client 对象用作 PostgreSQL 服务器的接口。 pg.Client.connect() 函数用来建立到服务器的连接。 pg.Client.query() 函数用来针对 PostgreSQL 数据库执行 SQL 查询。

将 host、dbname、user 和 password 参数替换为创建服务器和数据库时指定的值。

const pg = require('pg');

const config = {
    host: '<your-db-server-name>.postgres.database.chinacloudapi.cn',
    // Do not hard code your username and password.
    // Consider using Node environment variables.
    user: '<your-db-username>',     
    password: '<your-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();
        });
}

读取数据

使用以下代码进行连接,并使用 SELECT SQL 语句来读取数据。 pg.Client 对象用作 PostgreSQL 服务器的接口。 pg.Client.connect() 函数用来建立到服务器的连接。 pg.Client.query() 函数用来针对 PostgreSQL 数据库执行 SQL 查询。

将 host、dbname、user 和 password 参数替换为创建服务器和数据库时指定的值。

const pg = require('pg');

const config = {
    host: '<your-db-server-name>.postgres.database.chinacloudapi.cn',
    // Do not hard code your username and password.
    // Consider using Node environment variables.
    user: '<your-db-username>',     
    password: '<your-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);
        });
}

更新数据

使用以下代码进行连接,并使用 UPDATE SQL 语句读取数据。 pg.Client 对象用作 PostgreSQL 服务器的接口。 pg.Client.connect() 函数用来建立到服务器的连接。 pg.Client.query() 函数用来针对 PostgreSQL 数据库执行 SQL 查询。

将 host、dbname、user 和 password 参数替换为创建服务器和数据库时指定的值。

const pg = require('pg');

const config = {
    host: '<your-db-server-name>.postgres.database.chinacloudapi.cn',
    // Do not hard code your username and password.
    // Consider using Node environment variables.
    user: '<your-db-username>',     
    password: '<your-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(result => {
            console.log('Update completed');
            console.log(`Rows affected: ${result.rowCount}`);
        })
        .catch(err => {
            console.log(err);
            throw err;
        });
}

删除数据

使用以下代码进行连接,并使用 DELETE SQL 语句读取数据。 pg.Client 对象用作 PostgreSQL 服务器的接口。 pg.Client.connect() 函数用来建立到服务器的连接。 pg.Client.query() 函数用来针对 PostgreSQL 数据库执行 SQL 查询。

将 host、dbname、user 和 password 参数替换为创建服务器和数据库时指定的值。

const pg = require('pg');

const config = {
    host: '<your-db-server-name>.postgres.database.chinacloudapi.cn',
    // Do not hard code your username and password.
    // Consider using Node environment variables.
    user: '<your-db-username>',     
    password: '<your-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 = `
        DELETE FROM inventory 
        WHERE name = 'apple';
    `;

    client
        .query(query)
        .then(result => {
            console.log('Delete completed');
            console.log(`Rows affected: ${result.rowCount}`);
        })
        .catch(err => {
            console.log(err);
            throw err;
        });
}

清理资源

若要清理本快速入门中使用的所有资源,请使用以下命令删除该资源组:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

后续步骤