官术网_书友最值得收藏!

Schemas

Object names can be reused in different schemas without conflict. The schema contains all the database-named objects, including tables, views, functions, aggregates, indexes, sequences, triggers, data types, domains, and ranges:

By default, there is a schema called public in the template databases. That means all the newly-created databases also contain this schema. All users, by default, can access this schema implicitly. Again, this is inherited from the template databases. Allowing this access pattern simulates a situation where the server is not schema-aware. This is useful in small companies where there's no need to have complex security. Also, this enables a smooth transition from non-schema-aware databases.

In a multi-user and multi-database environment setup, remember to revoke the ability for all users to create objects in the public schema. This is done with the  REVOKE CREATE ON SCHEMA public FROM PUBLIC;  command in the newly-created database, or in the  template1  database.

When a user wants to access a certain object, they need to specify the schema name and the object name separated by a period (.). If the search_path database setting doesn't contain this name, or if the developer likes to use fully-qualified names (for example, to select all the entries in pg_database in the pg_catalog schema), you need to write the following command:

SELECT * FROM pg_catalog.pg_database;
--Alternatively you can also use the following command:
TABLE pg_catalog.pg_database;

Qualified database-object names are sometimes tedious to write, so most developers prefer to use the unqualified object name, which is composed of the object name without the schema. PostgreSQL provides a search_path setting that's similar to the using directive in the C++ language. search_path is composed of schemas that are used by the server to search for the object. The default search_path, as shown in the following code, is $user, public. If there's a schema with the same name as the user, it will be used first to search for objects or to create new objects. If the object isn't found in the schemas specified in the search_path, an error will be thrown as follows:

postgres=# SHOW search_path;
search_path
-----------------
"$user", public
(1 row)
Generally speaking, you shouldn't rely on implicit conventions and information such as SELECT *, NATURAL JOIN, or  JOIN USING. In this context, it's recommended to use fully-qualified names. 
主站蜘蛛池模板: 肥乡县| 富宁县| 崇明县| 抚宁县| 从江县| 湖南省| 上虞市| 通渭县| 临武县| 哈尔滨市| 滦南县| 洪湖市| 富平县| 保康县| 攀枝花市| 青田县| 奉节县| SHOW| 青川县| 正蓝旗| 垦利县| 天柱县| 弥勒县| 巫溪县| 夹江县| 师宗县| 本溪| 庆元县| 泰来县| 大英县| 古丈县| 沁阳市| 慈利县| 白玉县| 怀集县| 乐平市| 长丰县| 新巴尔虎左旗| 瑞丽市| 陇西县| 黄大仙区|