作者:empty 页数:94 出版社:empty |
PostgreSQL学习手册(数据表)对于任何一种关系型数据库面言,表都是数据有储的最核心,最基础的对象单元。现在就让我们从这里起步吧。1.创建表:CREATE TABLE products(product_no integer,name text,price numeric);2.删除表:DROP TABLE products;3.创建带有缺省值的表:CREATE TABLE products(product_no integer,name text,price numeric DEFAULT 9.99--DEFAULT是关键字, 其后的数蓝9.99是字及price的默认值。);CREATE TABLE products(product_no SERIAL,name text,price numeric DEFAULT 9.99);输出为:NOTICE:CREATETABLEwillcreateimplicitsequence productsproductnoseq forserialcolumn products.product_no 4.约束:--SERIAL类露的表示读学为增字, 完全都F Oracle中的Sequence。检查约束是表中最为常见的约束类型,它允许你声明在某个字段里的数慎必须满足一个布尔表达式。不仅如此,我们也可以声明表级别的检查约束,CREATE TABLE products(--price字没的必人于0.否在入成修战学值是, 将研发速规错况。还需要说明的起。该检的来--是战名约束, 部连表定文时没育显示命名该约来。这样PostgreSQL将会根当前的表客、宁段名和约束类型,一为的来自动命名, 如:products price_check.price numeric CHECK(price>0));CREATE TABLE products(product_no integer,name text,--字民的检查构电被显示命为positive price.这样做好处在于今后护识的束时, 可以根据该名进行直接操作,
price numeric CONSTRAINT positive_price CHECK(price>0));下面的约東是非空约東,即约東的字段不能插入空值,或者是将己有数据更新为空值。CREATE TABLE products(product_no integer NOT NULL,name text NOT NULL,price numeric);如果一个字段中存在多个约束,在定文时可以不用考虑约束的声明顺序。CREATE TABLE products(product_no integer NOT NULL,name text NOT NULL,price numeric NOT NULL CHECK(price>0));啡一性约束,即指定的字段不能插入重复值,或者是将某一记录的值更新为当首表中的已有值、CREATE TABLE products(product_no integer UNIQUE,name text,price numeric);CREATE TABLE products(product no integer,name text,pnc e numeric,UNIQUE(product_no));为表中的多个字段定文联合唯一性。CREATE TABLE example(a integer,b integer,c integer,UNIQUE(a, c));为唯一性约束命名。CREATE TABLE products(product no integer CONSTRAINT must_be_different UNIQUE,name text,price numeric);product_no integer PRIMARYKEY, 一度product_no被定义为表的常一十键。name text,price numerica integer,b integer,c integer,PRIMARYKEY(b, c)order_id integer PRIMARYKEY, --接也可以有自己的主理,--该表的product_no 7为上岛products表主Y prod luc t_no) 的外、product_no integer REFERENCES products(product_no) ,quantity integera integer PRIMARYKEYb integer,c integer,--该外缝的字级教量和熟调用表中主缝的数量必保持一致.product_no integer PRIMARYKEY,name text,price numericorder_id integer PRIMARYKEY,shipping_address textproduct_no integer REFERENCES products ON DELETE RESTRICT, 一送项order_id integer REFERENCES orders ON DELETE CASCADE, +联送项quantity integer,PRIMARYKEY(product_no, order_id)本手册由WE VVV制作在插入数据时, 空值(NULL) 之间被视为不相等的数据, 因此对于某一唯一性字段, 可以多次插入空值, 然而需要注意的是, 这一规则并不是被所有数据库都遵守,因此在进行数据库移植时可能会适成一定的麻烦。5.主键和外键:从技术上来讲,主键约束只是唯约束和李空约束的组合:CREATE TABLE products();和唯一性约束一样,主键可以同时作用于多个字段,形成联合主键:CREATE TABLE example();外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中某些行出现的数值。我们把这个行为称做两个相关表之间的参考充整性.CREATE TABLE orders();CREATE TABLEt 1();油WE VVV制作当多个表之间存在了主外储的参考性约系成切片应用表(主键表)中的某行记录,由于读行记承的主做宁段值可能正在被其引用表(外键表)中某条记录所关联,除操作将会失败。如果想完成此操作,一个显而易见的方法是先除引用表中和该记录关联的行, 之后再删除被引用表中的该行记录。然面需要说明的是, PostgreSQL为我们提供了史为方便的方式光成此类操作,CREATE TABLE products();CREATE TABLE orders();CREATE TABLE order_items();限制和级联除是两仲最常见的选项。RESTRICT禁止除被引用的行。NO ACTION的意思是如果在检查约束的时候, 如果还存在任何引用行, 则抛出错误:如果你不声明任何东, 那么它就是缺省的行为。(这两个选择的实际区别是, NO ACTION允许约束检查推迟到事务的晚些时候, 面RESTRICT不行, ) CASCADE声明在制除一个被引用的行的时候, 引用它的行也会被白动除掉.在外键字段上的动作还有两个选项:SET NULL和SET DEFAULT.这样公导致在被引用行除的时候, 引用它们的字段分别设置为空或者缺省值。请注意这些选项并不能让你迷脱被观察和约束的境地, 比如, 如果一个动作声明SET DEFAULT.但是
缺省值并不能满足外键, 那么动作就会失败。类似ON DELETE.还有ON UPDATE选项, 它是在被引用字段修改(更新) 的时候调用的。可用的动作是一样的。二、系统字段:PostgreSQL的每个数据表中都包含几个随含定义的系统字段, 因此, 这些名字不能用于用户定义的字段名, 这些系统字段的功能有些类似于Oracle中的rownum和rowid等,oid:行的对象标识符(对象ID) , 这个字段只有在创建表的时候使用了WITH OIDS.或者是设置了配置参数default_with_oids时出现。这个字我的类型是oid(和字段同名) 。table oid:包含本行的表的OID.这个宁段对那些从继承层次中选取的查询特别有用, 因为如果没有它的话, 我们就很难说明一行来自哪个独立的表。table oid可以和pg_class的oid字段连接起来获取表名字。xmin:插入该行版木的事务的标识(事务ID) .cm in:在插入事务内部的命令标识(从零开始) .xmax:删除事务的标识(事务ID) , 如果不是被除的行版本, 那么是零,cmax:在除事务内都的命令标识符。或者是零。ct id:一个行版本在它所处的表内的物理位置。请注意, 尽管ct id可以用于非常快速地定位行版本, 但每次VACUUM FULL之后,一个行的ct id都会被更新或者移动。因此ct id是不能作为长期的行标识符的.OID是32位的最, 是在同一个集群内通用的计数器上肤的。对于一个大型或者长时间使用的数据库, 这个计数器是有可能重叠的, 因此, 毀设OID是唯一的是非常错误的, 除非你自己采取了措施米保证它们是唯一的。如果你需要标识表中的行, 我们强烈建议使用序列号生成器,三、表的修改:1.增加字段:ALTER TABLE products ADDCOLUMN description text;新增的字段对于表中已经存在的行面言最初将先填充所给出的缺省忙(如果你没有声明DEFAULT子句, 那么缺省是空值) 。在新增字段时,可以同时给该字段指定约束。ALTER TABLE products ADDCOLUMN description text CHECK(description >“) ;2.删除字段:ALTER TABLE products DROP COLUMN description;如果该表为被引用表,该字段为被引用字,那么上面的剩除操作将会失败。如果要想在制除被引用字段的同时级联的除其所有引用字段,可以采用下面的语法形式,ALTER TABLE products DROP COLUMN description CASCADE;3.增加约束:ALTER TABLE products ADD CHECK(name >“) ; --增加7一个表规约束ALTER TABLE products ADD CONSTRAINT some_name UNIQUE(product_no) ; 一增加众名的性约束.ALTER TABLE products ADD FOREIGNKEY(pdt_grp_id) REFERENCES pdt_grps; --增加外健约束,ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; 一智加一个空的来.4.册除约束:ALTER TABLE products DROP CONSTRAINT some_name;对于显示命名的约束, 可以根据其名称直接删除, 对于隐式自动命名的约束, 可以通过psql的 d tablename来获取该约束的名字、和删除字段一样, 如果你想删除有着被依赖关系地约束, 你要用CASCADE.一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。如:My Test=# d products和其他约束不同的是,非空约束没有名字,因此只能通过下面的方式除:ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;在为已有宁段添加缺者值时, 不会影响任何表中现有的数据行, 它只是为将来INSERT命令改变缺省值.ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;ALTER TABLE products ALTER COLUMN price DROP DEFAULT只有在宁段里现有的每个项都可以用一个隐含的类型转换转换成新的类型时才可能成功。比如当前的数据都是整型,而转换的目标类型为numeric或varchar, 这样的转换一般都可以成功, 与此同时, PostgreSQL还将试图把字段的缺省值《如果存在) 转换成新的类型,还有涉及该字段的任何约束。但是这些转换可能失,或者可能生成奇怪的结果。在修改某字段类型之前,你最好删除ALTER TABLE products ALTER COLUMN price TYPE numeric(10, 2) ;ALTER TABLE products RENAME COLUMN product_no TO product_number;只有表的所有者才能修改或者删除表的权限。要赋予一个权限, 我们使用GRANT命令婴撤销一个权限、使用REVOKE命令,雷要指出的是, PUBLIC是特殊“用户“可以用于将权限肤子系统中的每一个用户。在声明权限的位置写ALL则将所有的与该对象GRANT UPDATE ON table_name TO user; 一蒋表的更新权展子指定的user.GRANT SELECT ON table_name TO GROUP group; --将衣的select权别子指定的组,REVOKE ALL ON table_name FROM PUBLIC; -蒋表的所有权风Public的最初, 只有对象所有者(或者超级用户) 可以赋子成者撒销对象的权限。但是, 我们可以赋子一个 with grant option 权限, 这样就i接受权限的人以授子该权限其它人的权限。如果授子选项后来被销,都么所有那些从这个接受者接受了权限的用户(直接或Table public.products Columnproduct_no|integer|namepriceCheck constraints:|Type|Modifiers|text|numeric|positive_price CHECK(price>O::numeric)5.改变字段的缺省值:下面为酬除缺省值:6.修改字段的数据类型:那些约束,然后再把自己手工修改过的添加上去。7.修改字段名:8.修改表名:ALTER TABLE products RENAME TO items;四、权限:类型相关的权限都赋子出去.老通过级连的授权)都将失去该权限.本手册由WE VVV制作
PostgreSQL学习手册(模式Schema)PostgreSQL学习手册(表的继承和分区)一个数据库包含一个或多个命名的模式,模式又包含表,模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用面不会导致冲突; 比如, schema l和my schema都可以包含叫做my table的表, 和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。我们雷要模式有以下几个主要原因:1).允许多个用户使用一个数据库而不会干抚其它用户.2).把数据库对象组织成逻辑组,让它们更便于管理,3).第二方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。1.创建模式:CREATE SCHEMA my schema;通过以上命令可以创建名字为my schema的榄式, 在该模式被创建后, 其便可拥有自己的一组逻辑对象, 如表、视图和函数等,2.public模式:在介绍后面的内容之前, 这里我们需要先解释一下public模式, 每当我们创建一个新的数据库时, PostgreSQL都会为我们自动创建该模式, 当登录到该数据库吋, 如果没有特殊的指定, 我们将以该模式(public) 的形式操作各种数据对象。如:CREATE TABLE products(...) 等同于CREATE TABLE public.products(...)3.权限:织省时, 用户看不到模式中不属于他们所有的对象。为了让他们看得见, 模式的所有者需要在模式上赋子USAGE权限。为了让用户使用模式中的对象, 我们可能需要赋予额外的权限, 只要是适合该对象的。PostgreSQL根据不同的对象摄供了不同的权限类型,如:GRANT ALL ON SCHEMA my schema TO public;上面的ALL关键字将包含CREATE和USAGE两种权限。如果public模式拥有了my schema模式的CREATE权限, 那么登录到该模式的用户将可以在my schema模式中创建任意对象, 如:CREATE TABLE my schema.products(在为模式下的所有表赋子权限时,需要将权限拆分为各种不同的表操作,如:ALTER DEFAULT PRIVILEGES IN SCHEMA my schemaGRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;在为模式下的所有Sequence序列对象赋予权限时, 需要将权限拆分为各种不同的Sequence操作, 如:ALTER DEFAULT PRIVILEGES IN SCHEMA my schemaGRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;ALTER DEFAULT PRIVILEGES IN SCHEMA my schemaGRANT EXECUTE ON FUNCTIONS TO public;可以看出, 通过以上方式在public模式下为my schema模式创建各种对象是极为不方便的。下面我们将要介绍另外一种万式,即通过role对象。直接登录并关联到my schema对象。之后便可以在my schema模式下直接创建各种所需的对象了。CREATE ROLE my schema LOGIN PASSWORD 123456'; 一创建了阳I式兴联的角色对象CREATE SCHEMA my schema AUTHORIZATION my schema; -该频式犬到指定的角色, 式名和角色名可以不都在Linux Shell下, 以my schema的角色录到数据库My Test.在密码输入正确后将成功登录到该教据库.My Test=> d-查看该模式下, 以度模式有权到的tables信加列表.我们在使用一个数据库对象时可以使用它的全称来定位对象,然而这样做往往也是非常繁琐的,每次都不得不键入owner_name.object_name.PostgreSQL中提供了模式搜素路径, 这有些类似于Linux中的$PATH环境变量, 档我们执行一个Shell命令时, 只有该命令位于车PATH的目录列表中, 我们才可以通过命令名真接执行, 否就需要输入它的全路径名。PostgreSQL同样也通过查找一个搜索路径来判断一个表宄竟走哪个表,这个路径是一个需要查找的模式列表。在搜索路径里找到的第一个表将被当作选定的表,如果在搜索路径中没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的模式中存在也如此,在搜劳路径中的第一个模式叫做当前模式。除了是搜索的第一个模式之外, 它还是在CREATE TABLE没有声明模式名的时候, 新三一本手册由WE WW制作SET search_path TO my schema; --当的搜索路径中将尺是包含my schema一模式这个概念对于很多已经熟悉其他数据库编程的开发人员面言会多少有些陌生,然雨它的实现方式和设计原理却是简单易情,现在就
PostgreSQL学习手册(数据表) ..
PostgreSQL学习手册(模式Schema) .
PostgreSQL学习手册(表的继承和分区) .
PostgreSQL学习手册(常用数据类型.
PostgreSQL学习手册(函数和操作符(一>) .
PostgreSQL学习手册(函数和操作符(二) ..
PostgreSQL学习手册(函数和操作符 三) ..
PostgreSQL学习手册(索引) ..
PostgreSQL学习手册(事物隔离) ..
PostgreSQL学习手册(性能提升技巧) ..
一、表的定义:
一、表的继承:.
一、数值类型:.
六、数组:..
一、逻辑操作符:.
四、字符串函数和操作符:.
五、位串函数和操作符:.
六、模式匹配:..
八、时间/日期函数和操作符;.
九、序列操作函数:.
十二、系统信息函数:
一、索引的类型:
四、唯一索引:..
一、使用EXPLAIN:..
PostgreSQL学习手册(服务器配置)
PostgreSQL学习手册(角色和权限) .
PostgreSQL学习手册(数据库管理) .
PostgreSQL学习手册(数据库维护) ..
PostgreSQL学习手册(系统表) .
PostgreSQL学习手册(系统视图) .
一、服务器进程的启动和关闭:.
一、概述:..
一、恢复磁盘空间:.
二、更新规划器统计:.
四、定期重建索引:..
.pg_class.
三、Pg_attr def.
四、pg_auth id:.
五、pg_auth_members:..
七、PE_tablespace..
十、pg_index.
、pg_tables:..
二、Pg_indexes:.
三
Pg_views:.
四、pg_user.
五、pg_roles:..
六、pg_rules.
七、pg_settings:.
零、口令文件:..
七、pg_dump..
八、pg_restore:..
一、基本概念:..
一、概述:..
product_no integer,
name text,
PostgreSQL学习手册(客户端命令(一>) ..
PostgreSQL学习手册(客户端命令 二>) .
PostgreSQL学习手册(SQL语言函数) ..
PostgreSQL学习手册(PL/pgSQL过程语言) .
一、表的定义:
PostgreSQL学习手册(数据表)
对于任何一种关系型数据库面言,表都是数据有储的最核心,最基础的对象单元。现在就让我们从这里起步吧。
1.创建表:
CREATE TABLE products(
product_no integer,
name text,
price numeric
);
2.删除表