7.3.64. table_remove
#
7.3.64.1. 概要#
table_remove
はテーブルとそのカラムを削除します。もし、テーブルのキーあるいはそのテーブルのカラムにインデックスが張ってある場合はそれらも削除されます。
Added in version 6.0.1: もし、自分がなにをしようとしているかちゃんと理解しているのであれば、 --dependent yes
パラメーターを使うことで1回の table_remove
で対象テーブルを参照しているテーブルとカラムも削除することができます。
7.3.64.2. 構文#
このコマンドには2つの引数があります。:
table_remove name
[dependent=no]
7.3.64.3. 使い方#
削除したいテーブルの名前を指定するだけです。 table_remove
は指定されたテーブルとそのテーブルのカラムを削除します。もし、テーブルとそのテーブルのカラムにインデックスが張ってある場合は、張ってあるすべてのインデックスも削除します。
このセクションでは次のことについて説明します。
基本的な使い方
削除できないケース
対象テーブルを参照しているテーブル・カラムも一緒に削除
利用リソースの削減
7.3.64.3.1. 基本的な使い方#
次のケースを考えてみましょう。
Entries
というテーブルがあります。
Entries
テーブルにはいくつかカラムがあります。
Entries
テーブルのキーにはインデックスが張ってあります。
Entries
のあるカラムにはインデックスが張ってあります。
以下は Entries
テーブルを作成するコマンドです。
実行例:
table_create Entries TABLE_HASH_KEY UInt32
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Entries title COLUMN_SCALAR ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Entries content COLUMN_SCALAR Text
# [[0,1337566253.89858,0.000355720520019531],true]
以下は Entries
テーブルのキーにインデックスを張るコマンドです。
実行例:
table_create EntryKeys TABLE_HASH_KEY UInt32
# [[0,1337566253.89858,0.000355720520019531],true]
column_create EntryKeys key_index COLUMN_INDEX Entries _key
# [[0,1337566253.89858,0.000355720520019531],true]
以下は Entries
テーブルのカラムにインデックスを張るコマンドです。
実行例:
table_create Terms TABLE_PAT_KEY ShortText \
--default_tokenizer TokenBigram \
--normalizer NormalizerAuto
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Terms content_index COLUMN_INDEX Entries content
# [[0,1337566253.89858,0.000355720520019531],true]
table_remove
を実行する前に現在のスキーマを確認しましょう。
実行例:
dump
# table_create Entries TABLE_HASH_KEY UInt32
# column_create Entries content COLUMN_SCALAR Text
# column_create Entries title COLUMN_SCALAR ShortText
#
# table_create EntryKeys TABLE_HASH_KEY UInt32
#
# table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
#
# column_create EntryKeys key_index COLUMN_INDEX Entries _key
# column_create Terms content_index COLUMN_INDEX Entries content
Entries
テーブルを削除すると、次のテーブルとカラムが削除されます。
Entries
Entries.title
Entries.context
EntryKeys.key_index
Terms.content_index
次のテーブル(語彙表)は削除されません。
EntryKeys
Terms
table_remove
を実行しましょう。
実行例:
table_remove Entries
# [[0,1337566253.89858,0.000355720520019531],true]
以下が table_remove
実行後のスキーマです。 EntryKeys
と Terms
だけが残っています。
実行例:
dump
# table_create EntryKeys TABLE_HASH_KEY UInt32
#
# table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
7.3.64.3.2. 削除できないケース#
以下は削除できないケースです。
1つ以上のテーブルがこの削除対象のテーブルをキーの型として使っている。
1つ以上のカラムがこの削除対象のテーブルを値の型として使っている。
どちらのケースも参照先がなくなることを防ぎます。もし、削除対象のテーブルが型として参照されているままそのテーブルが削除されてしまうと、そのテーブルを参照しているテーブルとカラムは壊れてしまいます。
もし、削除対象のテーブルがどれかの条件を満たしたら table_remove
は失敗します。削除対象のテーブルも削除対象のテーブルのカラムも削除されません。
以下は削除対象のテーブルがキーの型に使われるケースの例です。
次のコマンドは削除対象のテーブルとそのテーブルをキーの型として使うテーブルを作成します。
実行例:
table_create ReferencedByTable TABLE_HASH_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
table_create ReferenceTable TABLE_HASH_KEY ReferencedByTable
# [[0,1337566253.89858,0.000355720520019531],true]
ReferencedByTable
に対する table_remove
は失敗します。
実行例:
table_remove ReferencedByTable
# [
# [
# -2,
# 1337566253.89858,
# 0.000355720520019531,
# "[table][remove] a table that references the table exists: <ReferenceTable._key> -> <ReferencedByTable>",
# [
# [
# "is_removable_table_raw",
# "lib/db.c",
# 2929
# ]
# ]
# ],
# false
# ]
ReferencedByTable
を削除する前に ReferenceTable
を削除する必要があります。
実行例:
table_remove ReferenceTable
# [[0,1337566253.89858,0.000355720520019531],true]
table_remove ReferencedByTable
# [[0,1337566253.89858,0.000355720520019531],true]
以下は削除対象のテーブルが値の型に使われるケースの例です。
次のコマンドは削除対象のテーブルとそのテーブルを値の型として使うカラムを作成します。
実行例:
table_create ReferencedByColumn TABLE_HASH_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Table TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Table reference_column COLUMN_SCALAR ReferencedByColumn
# [[0,1337566253.89858,0.000355720520019531],true]
ReferencedByColumn
に対する table_remove
は失敗します。
実行例:
table_remove ReferencedByColumn
# [
# [
# -2,
# 1337566253.89858,
# 0.000355720520019531,
# "[table][remove] a column that references the table exists: <Table.reference_column> -> <ReferencedByColumn>",
# [
# [
# "is_removable_table_raw",
# "lib/db.c",
# 2929
# ]
# ]
# ],
# false
# ]
ReferencedByColumn
を削除する前に Table.reference_column
を削除する必要があります。
実行例:
column_remove Table reference_column
# [[0,1337566253.89858,0.000355720520019531],true]
table_remove ReferencedByColumn
# [[0,1337566253.89858,0.000355720520019531],true]
7.3.64.3.3. 対象テーブルを参照しているテーブル・カラムも一緒に削除#
Added in version 6.0.1.
もし、自分がなにをしようとしているかちゃんと理解しているのであれば、 --dependent yes
パラメーターを使うことで1回の table_remove
で対象テーブルを参照しているテーブルとカラムも削除することができます。
以下のスキーマの ReferencedTable
は1つのテーブルと1つのカラムから参照されています。
実行例:
table_create ReferencedTable TABLE_HASH_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Table1 TABLE_HASH_KEY ReferencedTable
# [[0,1337566253.89858,0.000355720520019531],true]
table_create Table2 TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Table2 reference_column COLUMN_SCALAR ReferencedTable
# [[0,1337566253.89858,0.000355720520019531],true]
デフォルトでは ReferencedTable
を削除することはできません。
実行例:
table_remove ReferencedTable
# [
# [
# -2,
# 1337566253.89858,
# 0.000355720520019531,
# "[table][remove] a table that references the table exists: <Table1._key> -> <ReferencedTable>",
# [
# [
# "is_removable_table_raw",
# "lib/db.c",
# 2929
# ]
# ]
# ],
# false
# ]
--dependent yes
パラメーターを使うことで ReferencedTable
と Table1
と Table2.reference_column
を削除できます。 Table1
と Table2.reference_column
は ReferencedTable
を参照しています。
実行例:
table_remove ReferencedTable --dependent yes
# [[0,1337566253.89858,0.000355720520019531],true]
7.3.64.3.4. 利用リソースの削減#
table_remove
は 削除できないケース のチェックをするためにデータベース内のすべてのテーブルとカラムを開きます。
もし、大量のテーブルとカラムがある場合、 table_remove
はたくさんのリソースを使うかもしれません。このケース用の回避策があります。
table_remove
は最大スレッド数が 1
のときはチェック用に一時的に開いたテーブルとカラムを閉じます。
thread_limit を使うと現在の最大スレッド数を確認・変更できます。
この機能は次のケースでは使われます。
実行例:
table_create Entries TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
thread_limit 2
# [[0,1337566253.89858,0.000355720520019531],1]
table_remove Entries
# [[0,1337566253.89858,0.000355720520019531],true]
この機能は次のケースでは使われません。
実行例:
table_create Entries TABLE_NO_KEY
# [[0,1337566253.89858,0.000355720520019531],true]
thread_limit 2
# [[0,1337566253.89858,0.000355720520019531],1]
table_remove Entries
# [[0,1337566253.89858,0.000355720520019531],true]
7.3.64.4. 引数#
このセクションではすべての引数について説明します。
7.3.64.4.1. 必須引数#
必須の引数は1つです。
7.3.64.4.1.1. name
#
削除するテーブルの名前を指定します。
このパラメーターの使い方は 使い方 を参照してください。
7.3.64.4.2. 省略可能引数#
省略可能な引数が1つあります。
7.3.64.4.2.1. dependent
#
Added in version 6.0.1.
対象テーブルを参照しているテーブル・カラムも一緒に削除するかどうかを指定します。
yes
を指定した場合は、対象テーブルを参照しているテーブル・カラムも一緒に削除します。それ以外の場合は、どれも削除せずにエラーが返ります。
言い換えると、デフォルトでは、対象テーブルを参照しているテーブル・カラムが1つでもあると、対象テーブルを削除しません。
このパラメーターは注意して使ってください。危険なパラメーターです。
このパラメーターの使い方は 対象テーブルを参照しているテーブル・カラムも一緒に削除 を参照してください。
7.3.64.5. 戻り値#
このコマンドが成功したときは以下のようにボディは true
になります:
[HEADER, true]
このコマンドが失敗すると、 HEADER
にエラーの詳細が含まれます。
HEADER
については 出力形式 を参照してください。