PostgreSQL入门指南
为什么选择PostgreSQL?
在这篇文章中,我将探讨如何创建一个托管的 PostgreSQL 数据库(以下简称 SQL 数据库),并使用node_postgres连接到它。我拥有相当丰富的 MongoDB 数据库使用经验,并且使用 Prisma 构建了一个相当大的项目,该项目底层使用了 SQL,但我从未真正编写过 SQL 查询语句并直接与 SQL 数据库交互。
使用 Mongo Atlas(或 mLab)和 mongoose,我很容易就找到了启动和运行的方法,但是要启动和运行我自己的 SQL 数据库却很困难。
以下是需要考虑的因素:
- 我不想使用一些奇怪的免费网站,因为我永远无法在生产环境中使用它们。
- 我希望它价格便宜(也许我成功了?!)
- 它必须是一个真正可行的解决方案,一个我能想象自己在实际的Node应用程序中使用的解决方案。(而不是使用像GoDaddy服务器那样已经为我配置好一堆数据库的服务。)
废话不多说,下面我将详细介绍:
- 使用 DigitalOcean 搭建并运行数据库。
- 使用 node-postgres 在 Node 中设置项目配置。
- 创建并测试表格。
创建 PostgreSQL 数据库
如果你还没用过 DigitalOcean,那它真的很棒。简单来说,它是一个可以搭建虚拟服务器等等的网站。一开始,我尝试自己搭建服务器并安装 MySQL(运行费用大概每月 5 美元),但那越来越复杂,而且我的最终目标只是能够访问 SQL 数据库来编写前端应用程序,所以我不想把所有时间都花在这上面。所以……
我最终选择了 DigitalOcean 的托管数据库。虽然每月 15 美元,但比上课便宜多了,而且很靠谱,还帮我节省了大量时间(要知道,管理数据库可是需要全职工作的)。DigitalOcean 还会提供推荐码,注册后可以获得一定期限(通常是 30-60 天)的积分,而我正好有积分,所以可以免费试用!如果你也想试试,可以用我的推荐码注册,就能获得 50 美元的积分,有效期 30 天,让你免费上手。
设置 DigitalOcean 数据库
- 注册 DigitalOcean
- 创建一个新项目
- 创建一个托管数据库。我使用的是 PostgreSQL,截至撰写本文时,它是唯一可选的数据库。你需要在这里设置一些选项,但操作起来非常简单明了。
- 数据库将会创建完成,您可以在项目中看到它。请前往该项目完成设置。
- 添加您的 IP 地址,以防止数据库访问权限对公众开放。
- 下载SSL证书,我们将使用该证书进行连接。
干得漂亮!你的数据库已经启动并运行了。
连接到数据库
我并不打算写一篇关于如何开发完整应用程序的教程,所以我们这里只介绍几个步骤。首先,我们将安装 node-postgres,然后编写一个基本查询来创建一个新表并将其记录到控制台。
项目设置
连接只需要两样东西:一个用于连接的 .js 文件,以及你从 DigitalOcean 下载的 .crt 证书。以下是我的文件结构。
postgresql-tutorial
/certificate.crt (I renamed this)
/connect.js (you can name whatever you want)
设置连接
首先,这是我连接数据库所需的配置。所有配置都来自node-postgres 的文档,但我添加了一些注释来解释每个部分。所有配置选项都可以在你的 DigitalOcean 账户中找到,如下图所示。
// node-postgres also support a pool connection, but I was more familiar with the Client type so I started with that
const { Client } = require('pg');
// fs is used to read the certificate
const fs = require('fs');
const config = {
// everything here you can get from the "Connection Details" when viewing your database in DigitalOcean
user: 'doadmin',
host: 'db-postgresql-nyc1-21328-do-user-4669604-0.db.ondigitalocean.com',
database: 'defaultdb',
password: 'tqjgkd6uxyqger6n',
port: 25060,
/* You have to include the ssl options because DigitalOcean requires them.
This is essentially just added on from the boilerplate config in the node-postgres docs */
ssl : {
rejectUnauthorized : false,
ca: fs.readFileSync("./certificate.crt").toString(), //make sure name matches your certificate name you downloaded
}
}
// creates a new Client instance with the config options above (you can also just put them directly in as argument)
const client = new Client(config);
// Connects! (Or tells me I don't know what I'm doing)
client.connect((err) => {
if (err) {
console.log("Connection error!", err)
} else {
console.log("Connection to DB successful")
}
});
测试数据库
使用上面的代码(以及您自己的配置选项,因为上面的配置选项已不再有效),您应该会在控制台中看到连接成功。从连接成功开始,操作数据库就非常简单了。基本上,node-postgres 提供了SQL 查询语句,您可以传入一个 SQL 查询。我不会深入讲解这部分内容,毕竟,我最初的目的是为了更好地掌握这方面。如果查询成功,将会返回一个响应对象。
在同一个 connect.js 文件中,添加以下代码。
const makeTable = `
CREATE TABLE products (
product_no integer,
name text,
price numeric
);`;
const testQuery = `SELECT * FROM products`
client.query(makeTable) //pass in the testQuery to see if making the table was successful
.then(res => console.log(res))
.catch(e => console.error(e))
.then(() => client.end())
添加这些代码行后,你应该能够运行node connect.js并看到返回的响应对象。
本质上,`client.query` 接收一个 `makeTable` SQL 查询(我从PostgreSQL 文档中获取的),该查询是一个 Promise,它会记录返回的响应或错误。最后,连接被关闭。
testQuery您可以看到,您可以传递第二个查询client.query(替换 makeTable),并且您应该能够获得另一个响应对象,其中显示了您最初创建的表的详细信息。
就是这样。希望这篇文章对其他人也有帮助,让他们能够快速上手,在实际应用中使用 SQL!
我在星巴克里空调开得太冷,手都快冻僵了,所以匆匆忙忙地写了这篇帖子。如果有什么不清楚的地方,请告诉我,我会修改和澄清!
文章来源:https://dev.to/doylecodes/getting-started-with-postgresql-5g29