2013-11-02 26 views
5

私はPostgresでテーブルを作成しただけで、暗黙のインデックスとシーケンスに関して完全に理解していない通知メッセージを受け取りました。どんな説明も認められるでしょう。Postgresの「暗黙的なシーケンス」と「暗黙的なインデックス」は何を意味しますか?

my_database=# CREATE TABLE sites 
my_database-# (
my_database(# site_id_key serial primary key, 
my_database(# site_url VARCHAR(255), 
my_database(# note VARCHAR(255), 
my_database(# type INTEGER, 
my_database(# last_visited TIMESTAMP 
my_database(#) ; 
NOTICE: CREATE TABLE will create implicit sequence "sites_site_id_key_seq" for serial column "sites_to_search.site_id_key" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "sites_pkey" for table "sites_to_search" 
CREATE TABLE 
+2

これは、postgresqlが自動的にシーケンスとインデックスを作成する通知です。 –

+0

@TIお返事ありがとうございます!だから私はこのテーブル、私が作成したプライマリキーと暗黙的なインデックスの2つのインデックスを持っていることを推測しています。そして、シーケンスはインデックス内の各数字の間のステップですか? – HMLDude

+3

いいえ、手動でさらに作成しない限り、インデックスは1つだけです。 PostgreSQLは、プライマリキーにインデックスが必要なので、作成していることを警告しています。シーケンスと同じことですが、プライマリキーが必要な場合を除き、 'SERIAL'データ型です。 「暗黙の」とは、PostgreSQLが明示的に求めなかったことを作成しているということです。あなたはインデックスやシーケンスを求めていませんが、あなたが求めた他のものによって*暗示されています。 – jpmc26

答えて

3

PostgreSQLの中には、インデックスとシーケンスによって処理されるものがあります。これには、シリアル型とbigserial型、一意の制約、および主キーが含まれます。これらはPostgreSQLに暗黙のうちではありません(したがって通知は少し誤解を招きます)。むしろPostgreSQLが動作しているDDLに暗黙的に含まれています。

つまり、インデックスとシーケンスは、通常のインデックスとシーケンスです。これらはPostgreSQLによって自動的に作成され、DDLで要求した保証と機能を提供します。