Skip to content

PostgreSQL 库表

数据库

sql
CREATE DATABASE app_db
  WITH ENCODING 'UTF8'
  LC_COLLATE 'C'
  LC_CTYPE 'C'
  TEMPLATE template0;
sql
DROP DATABASE IF EXISTS app_db;

删除数据库前不能有其他会话连接该数据库。

Schema

PostgreSQL 的 schema 是数据库内部的命名空间。默认使用 public

sql
CREATE SCHEMA app;
SET search_path TO app, public;
DROP SCHEMA IF EXISTS app CASCADE;

常用数据类型

类型说明
TEXT文本,长度不限
VARCHAR(n)限长文本
INTEGER普通整数
BIGINT大整数
NUMERIC(p, s)精确小数
DOUBLE PRECISION双精度浮点数
BOOLEAN布尔值
DATE日期,不包含时间
TIMESTAMP不带时区的日期时间
TIMESTAMPTZ带时区语义的时间戳
JSONB二进制 JSON,支持索引和查询
UUIDUUID
BYTEA二进制数据
TEXT[]文本数组
INTEGER[]整数数组

创建表

sql
CREATE TABLE users (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT NOT NULL UNIQUE,
  age INTEGER DEFAULT 0 CHECK (age >= 0),
  status SMALLINT NOT NULL DEFAULT 1,
  profile JSONB NOT NULL DEFAULT '{}'::jsonb,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

查看表

sql
\dt
\d users
sql
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';

修改表

sql
ALTER TABLE users ADD COLUMN avatar_url TEXT;
ALTER TABLE users ALTER COLUMN name TYPE VARCHAR(100);
ALTER TABLE users RENAME COLUMN avatar_url TO avatar;
ALTER TABLE users DROP COLUMN avatar;
ALTER TABLE users RENAME TO app_users;

删除表

sql
DROP TABLE IF EXISTS users;
TRUNCATE TABLE users RESTART IDENTITY;

TRUNCATE 会清空表数据,RESTART IDENTITY 会重置自增序列。

基于 MIT 许可发布