PostgreSQL关键点学习笔记

pg-创建数据库
1、使用 CREATE DATABASE SQL 语句来创建。
2、使用 createdb 命令来创建。
3、使用 pgAdmin 工具。

CREATE DATABASE runoobdb;

安装目录/bin 下,执行创建数据库的命令:
$ cd /Library/PostgreSQL/11/bin/
$ createdb -h localhost -p 5432 -U postgres runoobdb
password ******

pg-登录数据库
psql -d nnbi
使用 \l 用于查看已经存在的数据库
postgres=# \l

使用 \c + 数据库名 来进入数据库

postgres=# \c runoobdb

系统命令行窗口
在连接数据库后面添加数据库名来选择数据库:
psql -h localhost -p 5432 -U postgress testdb

pg-删除数据库
1、使用 DROP DATABASE SQL 语句来删除。
2、使用 dropdb 命令来删除。
3、使用 pgAdmin 工具。

postgres=# DROP DATABASE runoobdb;

PostgreSQL安装目录/bin 下,执行删除数据库的命令:

$ cd /Library/PostgreSQL/11/bin/
$ dropdb -h localhost -p 5432 -U postgres runoobdb
password ******

pg-创建表格

CREATE TABLE 语法格式如下:

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,

columnN datatype,
PRIMARY KEY( 一个或多个列 )
);

使用 \d 命令来查看表格是否创建成功:
runoobdb=# \d

\d tablename 查看表格信息:

runoobdb=# \d company

pg-删除表格
DROP TABLE 语法格式如下:

DROP TABLE table_name;

runoobdb=# drop table department, company;

pg-模式(SCHEMA)
一个模式可以包含视图、索引、据类型、函数和操作符等。
相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。

使用模式的优势:
允许多个用户使用一个数据库并且不会互相干扰。
将数据库对象组织成逻辑组以便更容易管理。
第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

模式类似于操作系统层的目录,但是模式不能嵌套。

我们可以使用 CREATE SCHEMA 语句来创建模式,语法格式如下:
CREATE TABLE myschema.mytable (

);

例如 runoobdb 来创建模式 myschema:

runoobdb=# create schema myschema;
CREATE SCHEMA

使用SQL来查看表格是否创建:

runoobdb=# select * from myschema.company;

删除模式
删除一个为空的模式(其中的所有对象已经被删除):
DROP SCHEMA myschema;

删除一个模式以及其中包含的所有对象:
DROP SCHEMA myschema CASCADE;

pg-INSERT INTO语句

INSERT INTO 语句语法格式如下:
INSERT INTO TABLE_NAME (column1, column2, column3,…columnN)
VALUES (value1, value2, value3,…valueN);

column1, column2,…columnN 为表中字段名。
value1, value2, value3,…valueN 为字段对应的值。

在使用 INSERT INTO 语句时,字段列必须和数据值数量相同,且顺序也要对应。
如果我们向表中的所有字段插入值,则可以不需要指定字段,只需要指定插入的值即可:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,…valueN);

例如插入多行:
runoobdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (4, ‘Mark’, 25, 'Rich-Mond ', 65000.00, ‘2007-12-13’ ), (5, ‘David’, 27, ‘Texas’, 85000.00, ‘2007-12-13’);
INSERT 0 2

pg-SELECT 语句
从数据库中选取数据。结果被存储在一个结果表中,称为结果集。

SELECT 语句语法格式如下:
SELECT column1, column2,…columnN FROM table_name;

column1, column2,…columnN 为表中字段名。
table_name 为表名。

例如:
SELECT * FROM table_name;

读取指定字段 ID 和 NAME:
runoobdb=# SELECT ID,NAME FROM company;

pg-运算符
PostgreSQL 运算符是一个保留关键字或字符,一般用在 WHERE 语句中,作为过滤条件。
常见的运算符有:
算术运算符
比较运算符
逻辑运算符
按位运算符
基本上同mysql类似

pg-表达式
表达式是由一个或多个的值、运算符、PostgresSQL 函数组成的。
PostgreSQL 表达式类似一个公式,我们可以将其应用在查询语句中,用来查找数据库中指定条件的结果集。

SELECT 语句的语法格式如下:
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION | EXPRESSION];

pg-WHERE 子句
在 PostgreSQL 中,当我们需要根据指定条件从单张表或者多张表中查询数据时,就可以在 SELECT 语句中添加 WHERE 子句,从而过滤掉我们不需要数据。
WHERE 子句不仅可以用于 SELECT 语句中,同时也可以用于 UPDATE,DELETE 等等语句中。

SELECT 语句中使用 WHERE 子句从数据库中读取数据的通用语法:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1]

pg-AND & OR 运算符
在 PostgreSQL 中,AND 和 OR 也叫连接运算符,在查询数据时用于缩小查询范围,我们可以用 AND 或者 OR 指定一个或多个查询条件。
AND 运算符表示一个或者多个条件必须同时成立。在 WHERE 子句中,AND 的使用语法如下:

SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2]…AND [conditionN];

OR 运算符表示多个条件中只需满足其中任意一个即可。在 WHERE 子句中,OR 的使用语法如下:

SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] OR [condition2]…OR [conditionN]

pg-UPDATE 语句
如果我们要更新在 PostgreSQL 数据库中的数据,我们可以用 UPDATE 来操作。
UPDATE 语句修改数据的通用 SQL 语法:
UPDATE table_name
SET column1 = value1, column2 = value2…, columnN = valueN
WHERE [condition];
我们可以同时更新一个或者多个字段。
我们可以在 WHERE 子句中指定任何条件。
例如:
runoobdb=# UPDATE COMPANY SET ADDRESS = ‘Texas’, SALARY=20000;

pg-DELETE 语句
使用 DELETE 语句来删除 PostgreSQL 表中的数据。
DELETE 语句删除数据的通用语法:
DELETE FROM table_name WHERE [condition];
如果没有指定 WHERE 子句,PostgreSQL 表中的所有记录将被删除。
一般我们需要在 WHERE 子句中指定条件来删除对应的记录,条件语句可以使用 AND 或 OR 运算符来指定一个或多个。

例如:
runoobdb=# DELETE FROM COMPANY WHERE ID = 2;

pg-LIKE 子句
在 LIKE 子句中,通常与通配符结合使用,通配符表示任意字符,在 PostgreSQL 中,主要有以下两种通配符:
百分号 %
下划线 _
如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。

使用 LIKE 子句搭配百分号 % 和下划线 _ 从数据库中获取数据的通用语法:
例如:
SELECT FROM table_name WHERE column LIKE ‘XXXX%’;
或者
SELECT FROM table_name WHERE column LIKE ‘%XXXX%’;
或者
SELECT FROM table_name WHERE column LIKE ‘XXXX_’;
或者
SELECT FROM table_name WHERE column LIKE ‘_XXXX’;
或者
SELECT FROM table_name WHERE column LIKE ‘XXXX’;

pg-LIMIT 子句
PostgreSQL 中的 limit 子句用于限制 SELECT 语句中查询的数据的数量。
带有 LIMIT 子句的 SELECT 语句的基本语法如下:
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows]
下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows] OFFSET [row num]

但是,在某些情况下,可能需要从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 3 个记录:
runoobdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

pg-ORDER BY 语句
在 PostgreSQL 中,ORDER BY 用于对一列或者多列数据进行升序(ASC)或者降序(DESC)排列。

ORDER BY 子句的基础语法如下:
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, … columnN] [ASC | DESC];

您可以在 ORDER BY 中使用一列或者多列,但是必须保证要排序的列必须存在。

pg-GROUP BY 语句
在 PostgreSQL 中,GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。
GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。
GROUP BY 子句的基本语法:
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2…columnN
ORDER BY column1, column2…columnN
GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前。
例如:
runoobdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

pg-WITH 子句
WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。
WITH 查询的基础语法如下:
WITH
name_for_summary_data AS (
SELECT Statement)
SELECT columns
FROM name_for_summary_data
WHERE conditions <=> (
SELECT column
FROM name_for_summary_data)
[ORDER BY columns]

例如:
With CTE AS
(Select
ID
, NAME
, AGE
, ADDRESS
, SALARY
FROM COMPANY )
Select * From CTE;

pg-HAVING 子句
HAVING 子句可以让我们筛选分组后的各组数据。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

HAVING 子句在 SELECT 查询中的位置:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

pg-DISTINCT 关键字
在 PostgreSQL 中,DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录。
用于去除重复记录的 DISTINCT 关键字的基本语法如下:
SELECT DISTINCT column1, column2,…columnN
FROM table_name
WHERE [condition]

postgreSQL高级
pg-约束
PostgreSQL 约束用于规定表中的数据规则。
约束确保了数据库中数据的准确性和可靠性。
约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。
常用的约束:
NOT NULL:指示某列不能存储 NULL 值。
UNIQUE:确保某列的值都是唯一的。
UNIQUE 约束可以设置列是唯一的,避免同一列出现重复值。
PRIMARY Key:NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。。
设置 UNIQUE 的列可能有多个,但是一张表只有一列可以设置 PRIMARY KEY。
主键是非空约束和唯一约束的组合。
一个表只能有一个主键,它可以由一个或多个字段组成,当多个字段作为主键,它们被称为复合键。
FOREIGN Key: 保证一个表中的数据匹配另一个表中的值的参照完整性。
FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。
通常一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键),即维护了两个相关表之间的引用完整性。
CHECK: 保证列中的值符合指定的条件。
CHECK 约束保证列中的所有值满足某一条件,即对输入一条记录要进行检查。如果条件值为 false,则记录违反了约束,且不能输入到表。
EXCLUSION :排他约束,保证如果将任何两行的指定列或表达式使用指定操作符进行比较,至少其中一个操作符比较将会返回 false 或空值。
EXCLUSION 约束确保如果使用指定的运算符在指定列或表达式上比较任意两行,至少其中一个运算符比较将返回 false 或 null。
FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。
删除约束
删除约束必须知道约束名称,已经知道名称来删除约束很简单,如果不知道名称,则需要找到系统生成的名称,使用 \d 表名 可以找到这些信息。
通用语法如下:
ALTER TABLE table_name DROP CONSTRAINT some_name;

pg-连接(JOIN)
PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
JOIN 有五种连接类型:
CROSS JOIN :交叉连接
交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,则结果表有 x*y 行。
由于交叉连接(CROSS JOIN)有可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。
INNER JOIN:内连接
内连接(INNER JOIN)根据连接谓词结合两个表(table1 和 table2)的列值来创建一个新的结果表。查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行的匹配对。
当满足连接谓词时,A 和 B 行的每个匹配对的列值会合并成一个结果行。
内连接(INNER JOIN)是最常见的连接类型,是默认的连接类型。INNER 关键字是可选的。
LEFT OUTER JOIN:左外连接
对于左外连接,首先执行一个内连接。然后,对于表 T1 中不满足表 T2 中连接条件的每一行,其中 T2 的列中有 null 值也会添加一个连接行。因此,连接的表在 T1 中每一行至少有一行。
RIGHT OUTER JOIN:右外连接
首先,执行内部连接。然后,对于表T2中不满足表T1中连接条件的每一行,其中T1列中的值为空也会添加一个连接行。这与左联接相反;对于T2中的每一行,结果表总是有一行。
FULL OUTER JOIN:全外连接
首先,执行内部连接。然后,对于表 T1 中不满足表 T2 中任何行连接条件的每一行,如果 T2 的列中有 null 值也会添加一个到结果中。此外,对于 T2 中不满足与 T1 中的任何行连接条件的每一行,将会添加 T1 列中包含 null 值的到结果中。

pg-UNION 操作符
PostgreSQL UNION 操作符合并两个或多个 SELECT 语句的结果。
注意:UNION内部的每个SELECT语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每个SELECT语句中的列的顺序必须相同.
UNIONS基础语法如下:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL子句
UNION ALL操作符可以连接两个有重复行的SELECT语句,默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

UINON ALL子句基础语法如下:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

PostgreSQL 别名
我们可以用 SQL 重命名一张表或者一个字段的名称,这个名称就叫着该表或该字段的别名。
创建别名是为了让表名或列名的可读性更强。SQL中使用AS来创建别名。

表的别名语法:
SELECT column1, column2…
FROM table_name AS alias_name
WHERE [condition];

列的别名语法:
SELECT column_name AS alias_name
FROM table_name
WHERE [condition];

PostgreSQL 触发器
PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。
PostgreSQL 触发器几个比较重要的点:
PostgreSQL 触发器可以在下面几种情况下触发:
(1)在执行操作之前(在检查约束并尝试插入、更新或删除之前)。
(2)在执行操作之后(在检查约束并插入、更新或删除完成之后)。
(3)更新操作(在对一个视图进行插入、更新、删除时)。

创建触发器时的基础语法如下:
CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
ON table_name
[
– 触发器逻辑…
];
event_name 可以是在所提到的表 table_name 上的 INSERT、DELETE 和 UPDATE 数据库操作。您可以在表名后选择指定 FOR EACH ROW。

PostgreSQL 索引
索引是加速搜索引擎检索数据的一种特殊表查询。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。
索引有助于加快 SELECT 查询和 WHERE 子句,但它会减慢使用 UPDATE 和 INSERT 语句时的数据输入。索引可以创建或删除,但不会影响数据。
使用 CREATE INDEX 语句创建索引,它允许命名索引,指定表及要索引的一列或多列,并指示索引是升序排列还是降序排列。
索引也可以是唯一的,与 UNIQUE 约束类似,在列上或列组合上防止重复条目。
CREATE INDEX (创建索引)的语法如下:
CREATE INDEX index_name ON table_name;
单列索引是一个只基于表的一个列上创建的索引,基本语法如下:
CREATE INDEX index_name ON table_name (column_name);
组合索引是基于表的多列上创建的索引,基本语法如下:
CREATE INDEX index_name ON table_name (column1_name, column2_name);
不管是单列索引还是组合索引,该索引必须是在 WHEHE 子句的过滤条件中使用非常频繁的列。
使用唯一索引不仅是为了性能,同时也为了数据的完整性。唯一索引不允许任何重复的值插入到表中。基本语法如下:
CREATE UNIQUE INDEX index_name on table_name (column_name);
局部索引是在表的子集上构建的索引;子集由一个条件表达式上定义。索引只包含满足条件的行。基础语法如下:
CREATE INDEX index_name on table_name (conditional_expression);
隐式索引 是在创建对象时,由数据库服务器自动创建的索引。索引自动创建为主键约束和唯一约束。
一个索引可以使用 PostgreSQL 的 DROP 命令删除。
DROP INDEX index_name;
什么情况下要避免使用索引?
使用索引时,需要考虑下列准则:
(1)索引不应该使用在较小的表上。
(2)索引不应该使用在有频繁的大批量的更新或插入操作的表上。
(3)索引不应该使用在含有大量的NULL的列上。
(4)索引不应该使用在频繁操作的列上。

PostgreSQL ALTER TABLE命令
在PostgreSQL中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列。
用ALTER TABLE在一张已存在的表上添加列的语法如下:
ALTER TABLE table_name ADD column_name datatype;

PostgreSQL TRUNCATE TABLE
PostgreSQL中TRUNCATE TABLE 用于删除表的数据,但不删除表结构。
也可以用 DROP TABLE删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。
TRUNCATE TABLE 可以立即释放表空间,而不需要后续 VACUUM 操作,这在大型表上非常有用。
TRUNCATE TABLE 基础语法如下:
TRUNCATE TABLE table_name;

PostgreSQL View(视图)
PostgreSQL 视图是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。
在 PostgreSQL用CREATE VIEW语句创建视图,视图创建可以从一张表,多张表或者其他视图。
CREATE VIEW 基础语法如下:
CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2…
FROM table_name
WHERE [condition];
您可以在 SELECT 语句中包含多个表,这与在正常的 SQL SELECT 查询中的方式非常相似。如果使用了可选的 TEMP 或 TEMPORARY 关键字,则将在临时数据库中创建视图。
要删除视图,只需使用带有 view_name 的 DROP VIEW 语句。DROP VIEW 的基本语法如下:
runoobdb=# DROP VIEW view_name;

PostgreSQL TRANSACTION(事务)
TRANSACTION(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
数据库事务通常包含了一个序列的对数据库的读/写操作。
当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,
如果事务中有的操作没有成功完成,则事务中的所有操作都需要回滚,回到事务执行前的状态;
同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
事务的属性
事务具有以下四个标准属性,通常根据首字母缩写为 ACID:
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

BEGIN TRANSACTION 命令
事务可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。
此类事务通常会持续执行下去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。
不过在数据库关闭或发生错误时,事务处理也会回滚。以下是启动一个事务的简单语法:
BEGIN;
或者
BEGIN TRANSACTION;
COMMIT 命令是用于把事务调用的更改保存到数据库中的事务命令,即确认事务。
COMMIT 命令的语法如下:
COMMIT;
或者
END TRANSACTION;
ROLLBACK 命令是用于撤消尚未保存到数据库的事务命令,即回滚事务。
ROLLBACK 命令的语法如下:
ROLLBACK;

PostgreSQL LOCK(锁)
锁主要是为了保持数据库数据的一致性,可以阻止用户修改一行或整个表,一般用在并发较高的数据库中。
在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

数据库中有两种基本的锁:排它锁(Exclusive Locks)和共享锁(Share Locks)。
如果数据对象加上排它锁,则其他的事务不能对它读取和修改。
如果加上共享锁,则该数据库对象可以被其他事务读取,但不能修改。
LOCK 命令基础语法如下:
LOCK [ TABLE ]
name
IN
lock_mode
name:要锁定的现有表的名称(可选模式限定)。如果只在表名之前指定,则只锁定该表。如果未指定,则锁定该表及其所有子表(如果有)。
lock_mode:锁定模式指定该锁与哪个锁冲突。如果没有指定锁定模式,则使用限制最大的访问独占模式。可能的值是:ACCESS SHARE,ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。
一旦获得了锁,锁将在当前事务的其余时间保持。没有解锁表命令;锁总是在事务结束时释放。

死锁
当两个事务彼此等待对方完成其操作时,可能会发生死锁。
尽管 PostgreSQL 可以检测它们并以回滚结束它们,但死锁仍然很不方便。
为了防止应用程序遇到这个问题,请确保将应用程序设计为以相同的顺序锁定对象。

咨询锁
PostgreSQL提供了创建具有应用程序定义含义的锁的方法。这些被称为咨询锁。由于系统不强制使用它们,所以正确使用它们取决于应用程序。咨询锁对于不适合 MVCC 模型的锁定策略非常有用。
例如,咨询锁的一个常见用途是模拟所谓"平面文件"数据管理系统中典型的悲观锁定策略。虽然存储在表中的标志可以用于相同的目的,但是通知锁更快,避免了表膨胀,并且在会话结束时由服务器自动清理。

PostgreSQL AUTO INCREMENT(自动增长)
AUTO INCREMENT(自动增长) 会在新记录插入表中时生成一个唯一的数字。
PostgreSQL 使用序列来标识字段的自增长,数据类型有 smallserial、serial 和 bigserial 。这些属性类似于 MySQL 数据库支持的 AUTO_INCREMENT 属性。
PostgreSQL 使用序列来标识字段的自增长:
CREATE TABLE runoob
(
id serial NOT NULL,
alttext text,
imgurl text
)

SERIAL 数据类型基础语法如下:
CREATE TABLE tablename (
colname SERIAL
);

PostgreSQL PRIVILEGES(权限)
无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。
对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。
GRANT 命令的基本语法如下:
GRANT privilege [, …]
ON object [, …]
TO { PUBLIC | GROUP group | username }
privilege − 值可以为:SELECT,INSERT,UPDATE,DELETE, RULE,ALL。
object − 要授予访问权限的对象名称。可能的对象有: table, view,sequence。
PUBLIC − 表示所有用户。
GROUP group − 为用户组授予权限。
username − 要授予权限的用户名。PUBLIC 是代表所有用户的简短形式。

另外,我们可以使用 REVOKE 命令取消权限,REVOKE 语法:
REVOKE privilege [, …]
ON object [, …]
FROM { PUBLIC | GROUP groupname | username }

你可能感兴趣的:(postgresql,postgresql)