R 与 PostgreSQL 连接

SQL
Author

Rui

Published

November 1, 2022

参考:

[1] https://community.rstudio.com/t/sql-errors-while-rendering-quarto/147671

[2] https://hevodata.com/learn/rpostgresql/

[3] https://d.cosx.org/d/419974-r-markdown-sql

[4] https://bookdown.org/yihui/rmarkdown/language-engines.html#sql

建议使用 11 版本的 PostgreSQL。需要安装包 DBIRPostgreSQL,如果使用的是 MySQL 的话安装 RMySQL。安装完后记得加载:

设置通用接口:

library(DBI)
library(RPostgreSQL)
## Warning: package 'RPostgreSQL' was built under R version 4.2.2
con <- dbConnect(RPostgreSQL::PostgreSQL(), dbname = "postgres", host = "localhost", user = "postgres", password = "12345678")

knitr::opts_chunk$set(connection = "con") # 全局设置

对以上的 code chunk 设置 include = FALSE 能够隐藏该代码块。

一些未知的原因导致我不能使用 SQL 代码块创建表,但可以使用查询。所以我事先使用以下代码把示例数据在 PostgreSQL 中创建好,之后再通过 SQL 代码块查询。

-- 创建表
CREATE TABLE Product
(product_id      CHAR(4)        NOT NULL,
 product_name    VARCHAR(100)   NOT NULL,
 product_type    VARCHAR(32)    NOT NULL,
 sale_price      INTEGER        ,
 purchase_price  INTEGER        ,
 regist_date     DATE           ,
 PRIMARY KEY (product_id));

-- DML:插入数据
BEGIN TRANSACTION;

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;
-- 选取表
SELECT * FROM Product;
8 records
product_id product_name product_type sale_price purchase_price regist_date
0001 T恤衫 衣服 1000 500 2009-09-20
0002 打孔器 办公用品 500 320 2009-09-11
0003 运动T恤 衣服 4000 2800 NA
0004 菜刀 厨房用具 3000 2800 2009-09-20
0005 高压锅 厨房用具 6800 5000 2009-01-15
0006 叉子 厨房用具 500 NA 2009-09-20
0007 擦菜板 厨房用具 880 790 2008-04-28
0008 圆珠笔 办公用品 100 NA 2009-11-11
SELECT product_type, COUNT(*) 
  FROM Product 
 GROUP BY product_type;
3 records
product_type count
衣服 2
办公用品 2
厨房用具 4