Skip to main content
`Ctrl`+`K`

# 7.3.56. `schema`

## 7.3.56.1. Summary

Added in version 5.0.9.

`schema` command returns schema in the database.

This command is useful when you want to inspect the database. For example, visualizing the database, creating GUI for the database and so on.

## 7.3.56.2. Syntax

This command takes no parameters:

    schema

## 7.3.56.3. Usage

Here is an example schema to show example output:

Execution example:

    table_create Memos TABLE_HASH_KEY ShortText
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Memos content COLUMN_SCALAR Text
    # [[0,1337566253.89858,0.000355720520019531],true]
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenBigram \
      --normalizer NormalizerAuto
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Terms memos_content_index \
      COLUMN_INDEX|WITH_POSITION \
      Memos content
    # [[0,1337566253.89858,0.000355720520019531],true]

Here is an output of `schema` command against this example schema:

Execution example:

    schema
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "plugins": {
    #     },
    #     "types": {
    #       "Bool": {
    #         "id": 3,
    #         "name": "Bool",
    #         "size": 1,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Float": {
    #         "id": 12,
    #         "name": "Float",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Float32": {
    #         "id": 19,
    #         "name": "Float32",
    #         "size": 4,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Int16": {
    #         "id": 6,
    #         "name": "Int16",
    #         "size": 2,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Int32": {
    #         "id": 8,
    #         "name": "Int32",
    #         "size": 4,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Int64": {
    #         "id": 10,
    #         "name": "Int64",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "Int8": {
    #         "id": 4,
    #         "name": "Int8",
    #         "size": 1,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "LongText": {
    #         "id": 16,
    #         "name": "LongText",
    #         "size": 2147483648,
    #         "can_be_key_type": false,
    #         "can_be_value_type": false
    #       },
    #       "Object": {
    #         "id": 2,
    #         "name": "Object",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "ShortText": {
    #         "id": 14,
    #         "name": "ShortText",
    #         "size": 4096,
    #         "can_be_key_type": true,
    #         "can_be_value_type": false
    #       },
    #       "Text": {
    #         "id": 15,
    #         "name": "Text",
    #         "size": 65536,
    #         "can_be_key_type": false,
    #         "can_be_value_type": false
    #       },
    #       "Time": {
    #         "id": 13,
    #         "name": "Time",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "TokyoGeoPoint": {
    #         "id": 17,
    #         "name": "TokyoGeoPoint",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "UInt16": {
    #         "id": 7,
    #         "name": "UInt16",
    #         "size": 2,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "UInt32": {
    #         "id": 9,
    #         "name": "UInt32",
    #         "size": 4,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "UInt64": {
    #         "id": 11,
    #         "name": "UInt64",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "UInt8": {
    #         "id": 5,
    #         "name": "UInt8",
    #         "size": 1,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       },
    #       "WGS84GeoPoint": {
    #         "id": 18,
    #         "name": "WGS84GeoPoint",
    #         "size": 8,
    #         "can_be_key_type": true,
    #         "can_be_value_type": true
    #       }
    #     },
    #     "tokenizers": {
    #       "TokenBigram": {
    #         "id": 67,
    #         "name": "TokenBigram"
    #       },
    #       "TokenBigramIgnoreBlank": {
    #         "id": 72,
    #         "name": "TokenBigramIgnoreBlank"
    #       },
    #       "TokenBigramIgnoreBlankSplitSymbol": {
    #         "id": 73,
    #         "name": "TokenBigramIgnoreBlankSplitSymbol"
    #       },
    #       "TokenBigramIgnoreBlankSplitSymbolAlpha": {
    #         "id": 74,
    #         "name": "TokenBigramIgnoreBlankSplitSymbolAlpha"
    #       },
    #       "TokenBigramIgnoreBlankSplitSymbolAlphaDigit": {
    #         "id": 75,
    #         "name": "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
    #       },
    #       "TokenBigramSplitSymbol": {
    #         "id": 69,
    #         "name": "TokenBigramSplitSymbol"
    #       },
    #       "TokenBigramSplitSymbolAlpha": {
    #         "id": 70,
    #         "name": "TokenBigramSplitSymbolAlpha"
    #       },
    #       "TokenBigramSplitSymbolAlphaDigit": {
    #         "id": 71,
    #         "name": "TokenBigramSplitSymbolAlphaDigit"
    #       },
    #       "TokenDelimit": {
    #         "id": 65,
    #         "name": "TokenDelimit"
    #       },
    #       "TokenDelimitNull": {
    #         "id": 76,
    #         "name": "TokenDelimitNull"
    #       },
    #       "TokenDocumentVectorBM25": {
    #         "id": 82,
    #         "name": "TokenDocumentVectorBM25"
    #       },
    #       "TokenDocumentVectorTFIDF": {
    #         "id": 81,
    #         "name": "TokenDocumentVectorTFIDF"
    #       },
    #       "TokenMecab": {
    #         "id": 64,
    #         "name": "TokenMecab"
    #       },
    #       "TokenNgram": {
    #         "id": 78,
    #         "name": "TokenNgram"
    #       },
    #       "TokenPattern": {
    #         "id": 79,
    #         "name": "TokenPattern"
    #       },
    #       "TokenRegexp": {
    #         "id": 77,
    #         "name": "TokenRegexp"
    #       },
    #       "TokenTable": {
    #         "id": 80,
    #         "name": "TokenTable"
    #       },
    #       "TokenTrigram": {
    #         "id": 68,
    #         "name": "TokenTrigram"
    #       },
    #       "TokenUnigram": {
    #         "id": 66,
    #         "name": "TokenUnigram"
    #       }
    #     },
    #     "normalizers": {
    #       "NormalizerAuto": {
    #         "id": 83,
    #         "name": "NormalizerAuto"
    #       },
    #       "NormalizerHTML": {
    #         "id": 90,
    #         "name": "NormalizerHTML"
    #       },
    #       "NormalizerNFKC100": {
    #         "id": 85,
    #         "name": "NormalizerNFKC100"
    #       },
    #       "NormalizerNFKC121": {
    #         "id": 86,
    #         "name": "NormalizerNFKC121"
    #       },
    #       "NormalizerNFKC130": {
    #         "id": 87,
    #         "name": "NormalizerNFKC130"
    #       },
    #       "NormalizerNFKC150": {
    #         "id": 88,
    #         "name": "NormalizerNFKC150"
    #       },
    #       "NormalizerNFKC51": {
    #         "id": 84,
    #         "name": "NormalizerNFKC51"
    #       },
    #       "NormalizerTable": {
    #         "id": 89,
    #         "name": "NormalizerTable"
    #       }
    #     },
    #     "token_filters": {
    #       "TokenFilterNFKC100": {
    #         "id": 226,
    #         "name": "TokenFilterNFKC100"
    #       },
    #       "TokenFilterNFKC121": {
    #         "id": 227,
    #         "name": "TokenFilterNFKC121"
    #       },
    #       "TokenFilterNFKC130": {
    #         "id": 228,
    #         "name": "TokenFilterNFKC130"
    #       },
    #       "TokenFilterNFKC150": {
    #         "id": 229,
    #         "name": "TokenFilterNFKC150"
    #       }
    #     },
    #     "tables": {
    #       "Memos": {
    #         "id": 256,
    #         "name": "Memos",
    #         "type": "hash table",
    #         "key_type": {
    #           "id": 14,
    #           "name": "ShortText",
    #           "type": "type"
    #         },
    #         "value_type": null,
    #         "tokenizer": null,
    #         "normalizer": null,
    #         "normalizers": [
    #
    #         ],
    #         "token_filters": [
    #
    #         ],
    #         "indexes": [
    #
    #         ],
    #         "command": {
    #           "name": "table_create",
    #           "arguments": {
    #             "name": "Memos",
    #             "flags": "TABLE_HASH_KEY",
    #             "key_type": "ShortText"
    #           },
    #           "command_line": "table_create --name Memos --flags TABLE_HASH_KEY --key_type ShortText"
    #         },
    #         "columns": {
    #           "content": {
    #             "id": 257,
    #             "name": "content",
    #             "table": "Memos",
    #             "full_name": "Memos.content",
    #             "type": "scalar",
    #             "value_type": {
    #               "id": 15,
    #               "name": "Text",
    #               "type": "type"
    #             },
    #             "compress": null,
    #             "missing": "add",
    #             "invalid": "error",
    #             "section": false,
    #             "weight": false,
    #             "weight_float32": false,
    #             "position": false,
    #             "sources": [
    #
    #             ],
    #             "indexes": [
    #               {
    #                 "id": 259,
    #                 "full_name": "Terms.memos_content_index",
    #                 "table": "Terms",
    #                 "name": "memos_content_index",
    #                 "section": 0
    #               }
    #             ],
    #             "command": {
    #               "name": "column_create",
    #               "arguments": {
    #                 "table": "Memos",
    #                 "name": "content",
    #                 "flags": "COLUMN_SCALAR",
    #                 "type": "Text"
    #               },
    #               "command_line": "column_create --table Memos --name content --flags COLUMN_SCALAR --type Text"
    #             }
    #           }
    #         }
    #       },
    #       "Terms": {
    #         "id": 258,
    #         "name": "Terms",
    #         "type": "patricia trie",
    #         "key_type": {
    #           "id": 14,
    #           "name": "ShortText",
    #           "type": "type"
    #         },
    #         "value_type": null,
    #         "tokenizer": {
    #           "id": 67,
    #           "name": "TokenBigram",
    #           "options": null
    #         },
    #         "normalizer": {
    #           "id": 83,
    #           "name": "NormalizerAuto",
    #           "options": null
    #         },
    #         "normalizers": [
    #           {
    #             "id": 83,
    #             "name": "NormalizerAuto",
    #             "options": null
    #           }
    #         ],
    #         "token_filters": [
    #
    #         ],
    #         "indexes": [
    #
    #         ],
    #         "command": {
    #           "name": "table_create",
    #           "arguments": {
    #             "name": "Terms",
    #             "flags": "TABLE_PAT_KEY",
    #             "key_type": "ShortText",
    #             "default_tokenizer": "TokenBigram",
    #             "normalizer": "NormalizerAuto"
    #           },
    #           "command_line": "table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto"
    #         },
    #         "columns": {
    #           "memos_content_index": {
    #             "id": 259,
    #             "name": "memos_content_index",
    #             "table": "Terms",
    #             "full_name": "Terms.memos_content_index",
    #             "type": "index",
    #             "value_type": {
    #               "id": 256,
    #               "name": "Memos",
    #               "type": "reference"
    #             },
    #             "compress": null,
    #             "missing": null,
    #             "invalid": null,
    #             "section": false,
    #             "weight": false,
    #             "weight_float32": false,
    #             "position": true,
    #             "sources": [
    #               {
    #                 "id": 257,
    #                 "name": "content",
    #                 "table": "Memos",
    #                 "full_name": "Memos.content"
    #               }
    #             ],
    #             "indexes": [
    #
    #             ],
    #             "command": {
    #               "name": "column_create",
    #               "arguments": {
    #                 "table": "Terms",
    #                 "name": "memos_content_index",
    #                 "flags": "COLUMN_INDEX|WITH_POSITION",
    #                 "type": "Memos",
    #                 "source": "content"
    #               },
    #               "command_line": "column_create --table Terms --name memos_content_index --flags COLUMN_INDEX|WITH_POSITION --type Memos --source content"
    #             }
    #           }
    #         }
    #       }
    #     }
    #   }
    # ]

## 7.3.56.4. Parameters

This section describes all parameters.

### 7.3.56.4.1. Required parameters

There is no required parameter.

### 7.3.56.4.2. Optional parameters

There is no optional parameter.

## 7.3.56.5. Return value

`schema` command returns schema in the database:

    [HEADER, SCHEMA]

### 7.3.56.5.1. `HEADER`

See Output format about `HEADER`.

### 7.3.56.5.2. `SCHEMA`

`SCHEMA` is an object that consists of the following information:

    {
      "plugins":       PLUGINS,
      "types":         TYPES,
      "tokenizers":    TOKENIZERS,
      "normalizers":   NORMALIZERS,
      "token_filters": TOKEN_FITLERS,
      "tables":        TABLES
    }

### 7.3.56.5.3. `PLUGINS`

`PLUGINS` is an object. Its key is plugin name and its value is plugin detail:

    {
      "PLUGIN_NAME_1": PLUGIN_1,
      "PLUGIN_NAME_2": PLUGIN_2,
      ...
      "PLUGIN_NAME_n": PLUGIN_n
    }

### 7.3.56.5.4. `PLUGIN`

`PLUGIN` is an object that describes plugin detail:

    {
      "name": PLUGIN_NAME
    }

Here are properties of `PLUGIN`:

Name | Description
--- | ---
`name` | The plugin name. It’s used in plugin_register.

### 7.3.56.5.5. `TYPES`

`TYPES` is an object. Its key is type name and its value is type detail:

    {
      "TYPE_NAME_1": TYPE_1,
      "TYPE_NAME_2": TYPE_2,
      ...
      "TYPE_NAME_n": TYPE_n
    }

### 7.3.56.5.6. `TYPE`

`TYPE` is an object that describes type detail:

    {
      "name": TYPE_NAME,
      "size": SIZE_OF_ONE_VALUE_IN_BYTE,
      "can_be_key_type": BOOLEAN,
      "can_be_value_type": BOOLEAN
    }

Here are properties of `TYPE`:

Name | Description
--- | ---
`name` | The type name.
`size` | The number of bytes of one value.
`can_be_key_type` | `true` when the type can be used for table key, `false` otherwise.
`can_be_value_type` | `true` when the type can be used for table value, `false` otherwise.

### 7.3.56.5.7. `TOKENIZERS`

`TOKENIZERS` is an object. Its key is tokenizer name and its value is tokenizer detail:

    {
      "TOKENIZER_NAME_1": TOKENIZER_1,
      "TOKENIZER_NAME_2": TOKENIZER_2,
      ...
      "TOKENIZER_NAME_n": TOKENIZER_n
    }

### 7.3.56.5.8. `TOKENIZER`

`TOKENIZER` is an object that describes tokenizer detail:

    {
      "name": TOKENIZER_NAME
    }

Here are properties of `TOKENIZER`:

Name | Description
--- | ---
`name` | The tokenizer name. It’s used for default_tokenizer.

### 7.3.56.5.9. `NORMALIZERS`

`NORMALIZERS` is an object. Its key is normalizer name and its value is normalizer detail:

    {
      "NORMALIZER_NAME_1": NORMALIZER_1,
      "NORMALIZER_NAME_2": NORMALIZER_2,
      ...
      "NORMALIZER_NAME_n": NORMALIZER_n
    }

### 7.3.56.5.10. `NORMALIZER`

`NORMALIZER` is an object that describes normalizer detail:

    {
      "name": NORMALIZER_NAME
    }

Here are properties of `NORMALIZER`:

Name | Description
--- | ---
`name` | The normalizer name. It’s used for normalizer.

### 7.3.56.5.11. `TOKEN_FILTERS`

`TOKEN_FILTERS` is an object. Its key is token filter name and its value is token filter detail:

    {
      "TOKEN_FILTER_NAME_1": TOKEN_FILTER_1,
      "TOKEN_FILTER_NAME_2": TOKEN_FILTER_2,
      ...
      "TOKEN_FILTER_NAME_n": TOKEN_FILTER_n
    }

### 7.3.56.5.12. `TOKEN_FILTER`

`TOKEN_FILTER` is an object that describes token filter detail:

    {
      "name": TOKEN_FILTER_NAME
    }

Here are properties of `TOKEN_FILTER`:

Name | Description
--- | ---
`name` | The token filter name. It’s used for token_filters.

### 7.3.56.5.13. `TABLES`

`TABLES` is an object. Its key is table name and its value is table detail:

    {
      "TABLE_NAME_1": TABLE_1,
      "TABLE_NAME_2": TABLE_2,
      ...
      "TABLE_NAME_n": TABLE_n
    }

### 7.3.56.5.14. `TABLE`

`TABLE` is an object that describes table detail:

    {
      "name": TABLE_NAME
      "type": TYPE,
      "key_type": KEY_TYPE,
      "value_type": VALUE_TYPE,
      "tokenizer": TOKENIZER,
      "normalizer": NORMALIZER,
      "token_filters": [
        TOKEN_FILTER_1,
        TOKEN_FILTER_2,
        ...,
        TOKEN_FILTER_n,
      ],
      "indexes": [
        INDEX_1,
        INDEX_2,
        ...,
        INDEX_n
      ],
      "command": COMMAND,
      "columns": {
        "COLUMN_NAME_1": COLUMN_1,
        "COLUMN_NAME_2": COLUMN_2,
        ...,
        "COLUMN_NAME_3": COLUMN_3,
      }
    }

Here are properties of `TABLE`:

Name | Description
--- | ---
`name` | The table name.

`type`

The table type.

This is one of the followings:

> - `array`: TABLE_NO_KEY

> - `hash`: TABLE_HASH_KEY

> - `patricia trie`: TABLE_PAT_KEY

> - `double array trie`: TABLE_DAT_KEY

`key_type`

The type of the table’s key.

If the table type is `array`, this is `null`.

If the table type isn’t `array`, this is an object that has the following properties:

> - `name`: The type name.

> - `type`: `reference` if the type is an table, `type` otherwise.

`value_type`

The type of the table’s value.

If the table doesn’t use value, this is `null`.

If the table uses value, this is an object that has the following properties:

> - `name`: The type name.

> - `type`: `reference` if the type is an table, `type` otherwise.

`tokenizer`

The tokenizer of the table. It’s specified by default_tokenizer.

If the table doesn’t use tokenizer, this is `null`.

If the table uses tokenizer, this is an object that has the following properties:

> - `name`: The tokenizer name.

`normalizer`

The normalizer of the table. It’s specified by normalizer.

If the table doesn’t use normalizer, this is `null`.

If the table uses normalizer, this is an object that has the following properties:

> - `name`: The normalizer name.

`token_filters`

The token filters of the table. It’s specified by token_filters.

This is an array of an object. The object has the following properties:

> - `name`: The token filter name.

`indexes` | The indexes of the table’s key. This is an array of INDEX.
`command` | The Groonga command information to create the table. This is COMMAND.
`columns` | The columns of the table. This is an object that its key is a column name and its value is COLUMN.

### 7.3.56.5.15. `INDEX`

`INDEX` is an object that describes index detail:

    {
      "full_name": INDEX_COLUMN_NAME_WITH_TABLE_NAME,
      "table":     TABLE_NAME,
      "name":      INDEX_COLUMN_NAME,
      "section":   SECTION
    }

Here are properties of `INDEX`:

Name | Description
--- | ---
`full_name` | The index column name with table name. For example, `Terms.index`.
`table` | The table name of the index column. For example, `Terms`.
`name` | The index column name. For example, `index`.
`section` | The section number in the index column for the table’s key. If the index column isn’t multiple column index, this is `0`.

### 7.3.56.5.16. `COMMAND`

`COMMAND` is an object that describes how to create the table or column:

    {
      "name": COMMAND_NAME,
      "arguments": {
        "KEY_1": "VALUE_1",
        "KEY_2": "VALUE_2",
        ...,
        "KEY_n": "VALUE_n"
      },
      "command_line": COMMAND_LINE
    }

Here are properties of `COMMAND`:

Name | Description
--- | ---
`name` | The Groonga command name to create the table or column.
`arguments` | The arguments of the Groonga command to create the table or column. This is an object that its key is argument name and its value is argument value.
`command_line` | The Groonga command line to create the table or column. This is a string that can be evaluated by Groonga.

### 7.3.56.5.17. `COLUMN`

`COLUMN` is an object that describes column detail:

    {
      "name": COLUMN_NAME,
      "table": TABLE_NAME,
      "full_name": COLUMN_NAME_WITH_TABLE,
      "type": TYPE,
      "value_type": VALUE_TYPE,
      "compress": COMPRESS,
      "section": SECTION,
      "weight": WEIGHT,
      "compress": COMPRESS,
      "section": BOOLEAN,
      "weight": BOOLEAN,
      "position": BOOLEAN,
      "sources": [
        SOURCE_1,
        SOURCE_2,
        ...,
        SOURCE_n
      ],
      "indexes": [
        INDEX_1,
        INDEX_2,
        ...,
        INDEX_n
      ],
      "command": COMMAND
    }

Here are properties of `COLUMN`:

Name | Description
--- | ---
`name` | The column name. For example, `age`.
`table` | The table name of the column. For example, `Users`.
`full_name` | The column name with table name. For example, `Users.age`.

`type`

The column type.

This is one of the followings:

> - `scalar`: Scalar column

> - `vector`: Vector column

> - `index`: Index column

`value_type`

The type of the column’s value.

This is an object that has the following properties:

> - `name`: The type name.

> - `type`: `reference` if the type is an table, `type` otherwise.

`compress`

The compression method of the column.

If the column doesn’t use any compression methods, this is `null`.

If the column uses a compression method, this is one of the followings:

> - `zlib`: The column uses zlib to compress column value.

> - `lz4`: The column uses LZ4 to compress column value.

`section` | Whether the column can store section information or not. `true` if the column is created with `WITH_SECTION` flag, `false` otherwise. Normally, if the column isn’t an index column, this is `false`.
`weight` | Whether the column can store weight information or not. `true` if the column is created with `WITH_WEIGHT` flag, `false` otherwise.
`position` | Whether the column can store position information or not. `true` if the column is created with `WITH_POSITION` flag, `false` otherwise. Normally, if the column isn’t an index column, this is `false`.
`sources` | The source columns of the index column. This is an array of SOURCE. Normally, if the column isn’t an index column, this is an empty array.
`indexes` | The indexes of the column. This is an array of INDEX.
`command` | The Groonga command information to create the column. This is COMMAND.

### 7.3.56.5.18. `SOURCE`

`SOURCE` is an object that describes source detail:

    {
      "name":      COLUMN_NAME,
      "table":     TABLE_NAME,
      "full_name": COLUMN_NAME_WITH_TABLE_NAME
    }

Here are properties of `SOURCE`:

Name | Description
--- | ---
`name` | The source column name. For example, `content`. This may be a `_key` pseudo column.
`table` | The table name of the source column. For example, `Memos`.
`full_name` | The source column name with table name. For example, `Memos.content`.

## 7.3.56.6. See also

> - table_create

> - column_create