随着数据库技术的不断发展,PostgreSQL作为一款功能强大的开源关系型数据库管理系统,在企业和开发者中越来越受欢迎。本文将从PostgreSQL的发展历史、基本使用方法和与MySQL的区别等方面,全面介绍PostgreSQL。

一、PostgreSQL是什么?

PostgreSQL(简称PG或pgsql)是一个功能强大的开源对象关系型数据库管理系统(ORDBMS),它支持SQL标准的大部分功能,并提供了许多高级特性。PostgreSQL以其稳定性、可靠性、功能完整性和可扩展性而闻名。

二、PostgreSQL的使用

1. 安装PostgreSQL

Windows系统安装

下载地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

image

安装包如下:

image

三、PostgreSQL的基本操作

1、psql连接数据库

image

指定主机和端口

psql -h localhost -p 5432 -U postgres -d postgres

-h--host

指定数据库服务器的主机名或IP地址

-p--port

指定数据库服务器的端口号

-U--username

指定连接数据库的用户名

-d--dbname

指定要连接的数据库名称

2、创建数据库

(1)、查询所有数据库命令:\l

或者:

SELECT datname FROM pg_database;

结果如下:

postgres=# \l
                                                                              数据库列表
   名称    |  拥有者  | 字元编码 | Locale Provider |            校对规则            |             Ctype              | ICU Locale | ICU Rules |       存取权限
-----------+----------+----------+-----------------+--------------------------------+--------------------------------+------------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |            |           |
 template0 | postgres | UTF8     | libc            | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |            |           | =c/postgres          +
           |          |          |                 |                                |                                |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |            |           | =c/postgres          +
           |          |          |                 |                                |                                |            |           | postgres=CTc/postgres
(3 行记录)


postgres=# SELECT datname FROM pg_database;
  datname
-----------
 postgres
 template1
 template0
(3 行记录)

(2)、切换数据库

在psql命令行中,使用\c命令切换数据库,例如:

\c database_name

查看当前数据库:

SELECT current_database();

结果:

postgres=# SELECT current_database();
 current_database
------------------
 postgres
(1 行记录)

(3)、查看数据库的创建信息和其他属性:

SELECT * FROM pg_database WHERE datname = 'database_name';

效果:

postgres=# SELECT * FROM pg_database WHERE datname = 'postgres';
 oid | datname  | datdba | encoding | datlocprovider | datistemplate | datallowconn | datconnlimit | datfrozenxid | datminmxid | dattablespace |           datcollate           |            datctype            | daticulocale | daticurules | datcollversion | datacl
-----+----------+--------+----------+----------------+---------------+--------------+--------------+--------------+------------+---------------+--------------------------------+--------------------------------+--------------+-------------+----------------+--------
   5 | postgres |     10 |        6 | c              | f             | t            |           -1 |          723 |          1 |          1663 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |              |             |                |
(1 行记录)

 (4)、创建数据库 

CREATE DATABASE mydb;

结果:

postgres=# CREATE DATABASE mydb;
CREATE DATABASE

(5)、创建表

先进入数据库

\c mydb

创建表sql

-- 创建用户表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

效果:

postgres=# \c mydb
您现在已经连接到数据库 "mydb",用户 "postgres".
mydb=# CREATE TABLE users (
mydb(#     id SERIAL PRIMARY KEY,
mydb(#     username VARCHAR(50) NOT NULL UNIQUE,
mydb(#     email VARCHAR(100) NOT NULL,
mydb(#     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
mydb(# );
CREATE TABLE

(6)、查看表结构

\d users

结果:

mydb-# \d users
                                       数据表 "public.users"
    栏位    |            类型             | 校对规则 |  可空的  |               预设
------------+-----------------------------+----------+----------+-----------------------------------
 id         | integer                     |          | not null | nextval('users_id_seq'::regclass)
 username   | character varying(50)       |          | not null |
 email      | character varying(100)      |          | not null |
 created_at | timestamp without time zone |          |          | CURRENT_TIMESTAMP
索引:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_username_key" UNIQUE CONSTRAINT, btree (username)

(7)、插入数据

-- 插入单条数据
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');

-- 插入多条数据
INSERT INTO users (username, email) VALUES ('jane_smith', 'jane@example.com'),('bob_wilson', 'bob@example.com');

结果:

mydb=# INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
INSERT 0 1
mydb=# INSERT INTO users (username, email) VALUES ('jane_smith', 'jane@example.com'),('bob_wilson', 'bob@example.com');
INSERT 0 2

(8)、查询数据

SELECT * FROM users;

结果:

mydb=# SELECT * FROM users;
 id |  username  |      email       |         created_at
----+------------+------------------+----------------------------
  1 | john_doe   | john@example.com | 2026-01-09 09:35:30.469136
  2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538
  3 | bob_wilson | bob@example.com  | 2026-01-09 09:36:21.647538
(3 行记录)

条件查询

SELECT * FROM users WHERE username = 'john_doe';

结果:

mydb=# SELECT * FROM users WHERE username = 'john_doe';
 id | username |      email       |         created_at
----+----------+------------------+----------------------------
  1 | john_doe | john@example.com | 2026-01-09 09:35:30.469136
(1 行记录)

排序查询

mydb=# SELECT * FROM users ORDER BY created_at DESC;
 id |  username  |      email       |         created_at
----+------------+------------------+----------------------------
  2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538
  3 | bob_wilson | bob@example.com  | 2026-01-09 09:36:21.647538
  1 | john_doe   | john@example.com | 2026-01-09 09:35:30.469136
(3 行记录)

分页查询

SELECT * FROM users LIMIT 10 OFFSET 0;

结果:

mydb=# SELECT * FROM users LIMIT 10 OFFSET 0;
 id |  username  |      email       |         created_at
----+------------+------------------+----------------------------
  1 | john_doe   | john@example.com | 2026-01-09 09:35:30.469136
  2 | jane_smith | jane@example.com | 2026-01-09 09:36:21.647538
  3 | bob_wilson | bob@example.com  | 2026-01-09 09:36:21.647538
(3 行记录)

(9)、更新数据

mydb=# UPDATE users SET email = 'newemail@example.com' WHERE username = 'john_doe';
UPDATE 1
mydb=# SELECT * FROM users WHERE username = 'john_doe';
 id | username |        email         |         created_at
----+----------+----------------------+----------------------------
  1 | john_doe | newemail@example.com | 2026-01-09 09:35:30.469136
(1 行记录)

(10)、创建索引

创建B-tree索引

-- 创建B-tree索引
CREATE INDEX idx_username ON users(username);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 创建复合索引
CREATE INDEX idx_username_email ON users(username, email);

(11)、事务处理

-- 开始事务
BEGIN;

-- 执行操作
INSERT INTO users (username, email) VALUES ('test', 'test@example.com');
UPDATE users SET email = 'updated@example.com' WHERE username = 'test';

-- 提交事务
COMMIT;

-- 或者回滚事务
ROLLBACK;

(12)、创建视图

-- 创建视图
CREATE VIEW active_users AS
SELECT username, email, created_at
FROM users
WHERE created_at > CURRENT_DATE - INTERVAL '30 days';

结果:

mydb=# CREATE VIEW active_users AS
mydb-# SELECT username, email, created_at
mydb-# FROM users
mydb-# WHERE created_at > CURRENT_DATE - INTERVAL '30 days';
CREATE VIEW

三、Navicat中创建视图

image

视图右键,点击新建视图

image

 点击“视图创建工具”

image

拖动表到中间区域

image

点击构建并运行

image

点击保存按钮,输入视图名称,则视图创建完成。

image

 

 

 

posted on 2026-07-02 17:27  周文豪  阅读(22)  评论(0)    收藏  举报