照顾好你的数据,数据库也会照顾你。保持数据库的整洁,查询起来也会更快,应用也会少些错误。半夜被叫醒解决数据问题并不酷。接下来,就和章郎虫博主一起来了解postgresql的表和数据吧。
一、选择一个好的数据库对象名(Choosing good names for database objects)
让其他人可以快速了解数据库的最简单方法就是给数据库各对象取一个有意义的名字。具体注意事项可以参考《PostgreSQL-9-Admin-Cookbook》的96页。
在postgresql中,标准的索引表的格式是:{tablename}_{columnname(s)}_{suffix} ,即{表名}_{列名}_{后缀}。后缀有pkey、key、excl、idx和seq几种,分别对应主键约束、唯一约束、排他性约束、其它类型的索引和序列。
postgresql中的表可以同时包含多个触发器。触发器名中可以包含一些动作,比如update、delete等。触发器一个有用的命名规范格式为:{tablename}_{actionname}_{after|before}__trig 。
二、处理包含引用名的对象(Handling objects with quoted names)
博主第一次看到这个标题,实在不明白是什么意思(英语不好),不过看了以下例子大家应该就会明白。
首先创建包含引用的对象,CREATE TABLE "MyCust" AS SELECT * FROM cust;
然后用下面几个语句查询,可以发现都出现了相同的错误。
postgres=# SELECT count(*) FROM mycust;
ERROR: relation "mycust" does not exist
LINE 1: SELECT * FROM mycust;
postgres=# SELECT count(*) FROM MyCust;
ERROR: relation "mycust" does not exist
LINE 1: SELECT * FROM mycust;
而这个是对的。
postgres=# SELECT count(*) FROM "MyCust";
count
-------
5
(1 row)
从上面这个例子可以发现,如果创建对象的时候名字中用了引号,那么查询时也一定要包含引号。而且postgresql中对象名对大小写不敏感,也就是说“SELECT * FROM mycust;”、“SELECT * FROM MYCUST;”和“SELECT * FROM MyCust;”是一样的。
三、执行相同的名称,相同的列定义(Enforcing same name, same column definition)
两个比较复杂的sql。
Columns:
We can identify columns that are defined in different ways in different tables using a query
against the catalog.
SELECT table_schema,table_name,column_name,data_type |