# postgresql的理论知识 ## 一、Linux下centos7版本安装pgsql14 **1.安装rpm文件** ```shell sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm ``` **2.安装PostgreSQL** ```shell sudo yum -y install postgresql14-server ``` **3.初始化数据库** ```shell sudo /usr/pgsql-14/bin/postgresql-14-setup initdb ``` **4.启动和开机启动设置** ```shell sudo systemctl enable postgresql-14 sudo systemctl start postgresql-14 ``` **5.设置数据库密码(用来远程连接)** yum安装pgsql数据库会自动生成一个为postgres用户此用户为**超级管理员**。 使用postgres用户登录 ```shell su - postgres ``` 使用用户登录两种方式 ```shell 指定用户登录 #psql -U postgres 默认用户登录 #psql 默认用户是 postgres ``` 设置已有用户的密码(生产环境下需要设置复杂) ```shell alter user postgres with password '123456' ``` 退出登录 ```shell \q 退出主数据库 #或者 快捷键ctrl+d exit #退出pg账号也是可以用以上的快捷键 ``` **7.开启远程登录** 对所有ip开放 ```shell 打开postgresql.conf文件 #vim /var/lib/pgsql/14/data/postgersql.conf 修改listen_address配置对所有IP开放访问 listen_address = '*'#(此配置可以设置想开放的IP段如192.168.0.0/0) ``` 虽然此配置已经开放了所有IP的访问权限但是需要配置信任连接才可以连接数据库。 增加信任连接 ```shell 打开pg_hba.conf文件 vim /var/lib/pgsql/14/data/pg_hba.conf 在# IPv4 local connections: #此数据行下添加 此配置项 #host all all 0.0.0.0/0 trust 其中(trust)此项配置是免除网段内远程连接使用密码 配置完成后重启服务 systemctl restart postgresql-14 ``` 8.添加防火墙放行端口 ```shell firewall-cmd --zone=public --add-port=5432/tcp --permanent 重启防火墙 firewall-cmd --reload ``` 以上是postgreSQL的yum安装和放行远程连接的过程。 ## 二,postgreSQL基本语句使用及解释 ### SELECT查询、检索语句 此语句可从单个或多个表中检索数据,经常使用 #### 单个表检索数据: 语法: 第一种 ```sql SELECT user_id FROM table_name [other_clauses]; ``` 第二种 ```sql SELECT user_id FROM table_name [other_clauses]; ``` > 以上两种并没有区别,但是本人觉得第一种SQL语句更清晰一点,但是本人习惯使用第二种。 此语法中,**SELECT** 和 **FROM** 是关键字, 意思是 **选择** 和 **从**。 其中, **user_id** 表明要查找那个字段,而 **table_name** 是从那个数据表中查找。 字段可以自己定义查找的范围,还有全表扫描**(但是不建议使用)** 如下: ```sql SELECT user_id,name,age FROM table_name [other_clauses]; 以下全表扫描 SELECT * FROM table_name [other_clauses]; ``` 而 **[other_clauses]** 是表示**SELECT**子句的占位符,子句相当于附加条件。 以下是子句的解释: ​ `DISTINCT` 运算符用于从结果集中选择不重复的行。 ​ `ORDER BY` 子句用于对查询结果集中的行进行排序。 ​ `WHERE` 子句用于根据指定的条件过滤行。 ​ `LIMIT`和`FETCH` 子句用于从查询结果中选择一定数量(或百分比)的行比如前几行后几行。 ​ `GROUP BY` 可以根据一个或多个列的值将查询结果划分为多个组。 ​ `HAVING` 用于在GROUP BY子句之后对分组进行过滤。就是把过滤出的分组按要求在进行过滤。 ​ 使用诸如 `INNER JOIN`, `LEFT JOIN`, `FULL OUTER JOIN`, `CROSS JOIN` 之类的与其他表连接。 ​ 使用 `UNION`, `INTERSECT` 和 `EXCEPT`执行集合运算。其中的大致意思是 ​ `UNION` 操作会合并两个集合,并去除重复的元素,返回一个包含两个集合所有不重复元素的新集合。 ​ `INTERSECT` 操作会返回两个集合中共有的元素,即返回一个包含两个集合共有元素的新集合。 ​ `EXCEPT` 操作会从第一个集合中移除与第二个集合中相同的元素,返回一个包含第一个集合中不属于第二个集合的元素的新集合。 **详细的子句使用方法将在之后提及。** ### 2.1pgsql SELECT语句实际使用 单列查询 ```sql SELECT user_id FROM table_name; user_id --------- 1 2 3 4 5 6 (6 行记录) ``` 多列查询 ```sql SELECT user_id,name,age,locked, created_at FROM table_name; user_id | name | age | locked | created_at ---------+-------+-----+--------+---------------------------- 1 | huaji | 18 | t | 2023-07-14 14:28:41.628464 2 | huaj | 18 | t | 2023-07-14 14:29:04.38336 3 | huaj2 | 18 | t | 2023-07-14 14:29:23.121366 4 | huaj2 | 18 | t | 2023-07-14 14:29:42.075722 5 | huaj3 | 18 | t | 2023-07-14 14:29:54.351195 6 | huaj6 | 18 | f | 2023-07-14 14:35:31.500747 (6 行记录) ```