Skip to main content
The cockroach demo starts a temporary, in-memory CockroachDB cluster of one or more nodes, with or without a preloaded dataset, and opens an interactive SQL shell to the cluster.
  • All SQL shell commands, client-side options, help, and shortcuts supported by the command are also supported by cockroach demo.
  • The in-memory cluster persists only as long as the SQL shell is open. As soon as the shell is exited, the cluster and all its data are permanently destroyed. This command is therefore recommended only as an easy way to experiment with the CockroachDB SQL dialect.
  • By default, cockroach demo starts in secure mode using TLS certificates to encrypt network communication. It also serves a local DB Console that does not use TLS encryption.
  • Each instance of cockroach demo loads a temporary Enterprise license that expires after 24 hours. To prevent the loading of a temporary license, set the --disable-demo-license flag.
  • cockroach demo opens the SQL shell with a new named demo. The demo user is assigned a random password and granted the .
cockroach demo is designed for testing purposes only. It is not suitable for production deployments. To see a list of recommendations for production deployments, see the .

Synopsis

View help for cockroach demo:
Start a single-node demo cluster with the movr dataset pre-loaded:
Load a different dataset into a demo cluster:
Run the movr workload against a demo cluster:
Execute SQL from the command line against a demo cluster:
Start a multi-node demo cluster:
Start a multi-region demo cluster with default region and zone localities:
Start a multi-region demo cluster with manually defined localities:
Stop a demo cluster:

Datasets

By default, the movr dataset is pre-loaded into a demo cluster. To load a different dataset, use cockroach demo <dataset>. To start a demo cluster without a pre-loaded dataset, pass the --no-example-database flag.
WorkloadDescription
bankA bank database, with one bank table containing account details.
introAn intro database, with one table, mytable, with a hidden message.
kvA kv database, with one key-value-style table.
movrA movr database, with several tables of data for the .

By default, cockroach demo loads the movr database as the , with sample region (region) and availability zone (az) replica localities for each node specified with the .
startrekA startrek database, with two tables, episodes and quotes.
tpccA tpcc database, with a rich schema of multiple tables.
ycsbA ycsb database, with a usertable from the Yahoo! Cloud Serving Benchmark.

Flags

General

The demo command supports the following general-use flags.
FlagDescription
--auto-enable-rangefeedsOverride the default behavior of cockroach demo, which has rangefeeds enabled on startup. If you do not need to use with your demo cluster, use --auto-enable-rangefeeds=false to disable rangefeeds and improve performance. See for more detail.

Default: true
--cacheFor each demo node, the total size for caches. This can be a percentage (notated as a decimal or with %) or any bytes-based unit, for example:

--cache=.25
--cache=25%
--cache=1000000000 ----> 1000000000 bytes
--cache=1GB ----> 1000000000 bytes
--cache=1GiB ----> 1073741824 bytes

Default: 64MiB
--demo-localitySpecify information for each demo node. The input is a colon-separated list of key-value pairs, where the iith demo cockroach node.

For example, the following option assigns node 1’s region to us-east1 and availability zone to 1, node 2’s region to us-east2 and availability zone to 2, and node 3’s region to us-east3 and availability zone to 3:

--demo-locality=region=us-east1,az=1:region=us-east1,az=2:region=us-east1,az=3

By default, cockroach demo uses sample region (region) and availability zone (az) replica localities for each node specified with the --nodes flag.
--disable-demo-licenseStart the demo cluster without loading a temporary Enterprise license that expires after 24 hours.

Setting the COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING environment variable will also prevent the loading of a temporary license, along with preventing the sharing of anonymized with Cockroach Labs.
--echo-sqlReveal the SQL statements sent implicitly by the command-line utility. This can also be enabled within the interactive SQL shell via the \set echo shell command.
--embeddedMinimizes the SQL shell welcome text to be appropriate for embedding in playground-type environments. Specifically, this flag removes details that users in an embedded environment have no control over (e.g., networking information).
--no-example-databaseStart the demo cluster without a pre-loaded dataset.
To obtain this behavior automatically in every new cockroach demo session, set the COCKROACH_NO_EXAMPLE_DATABASE environment variable to true.
--execute

-e
Execute SQL statements directly from the command line, without opening a shell. This flag can be set multiple times, and each instance can contain one or more statements separated by semi-colons.

If an error occurs in any statement, the command exits with a non-zero status code and further statements are not executed. The results of each statement are printed to the standard output (see --format for formatting options).
--formatHow to display table rows printed to the standard output. Possible values: tsv, csv, table, raw, records, sql, html.

Default: table for sessions that ; tsv otherwise

This flag corresponds to the display_format client-side option for use in interactive sessions.
--geo-partitioned-replicasStart a 9-node demo cluster with applied to the database.
--globalSimulates a which sets the to three different regions. It also simulates the network latency that would occur between them given the specified localities. In order for this to operate as expected, with 3 nodes in each of 3 regions, you must also pass the --nodes 9 argument.
--http-portSpecifies a custom HTTP port to the for the first node of the demo cluster.

In multi-node clusters, the HTTP ports for additional clusters increase from the port of the first node, in increments of 1. For example, if the first node has an HTTP port of 5000, the second node will have the HTTP port 5001.
--insecureInclude this to start the demo cluster in insecure mode.

Env Variable: COCKROACH_INSECURE
--listening-url-fileThe file to which the node’s SQL connection URL will be written as soon as the demo cluster is initialized and the node is ready to accept connections.

This flag is useful for automation because it allows you to wait until the demo cluster has been initialized so that subsequent commands can connect automatically.
--max-sql-memoryFor each demo node, the maximum in-memory storage capacity for temporary SQL data, including prepared queries and intermediate data rows during query execution. This can be a percentage (notated as a decimal or with %) or any bytes-based unit, for example:

--max-sql-memory=.25
--max-sql-memory=25%
--max-sql-memory=10000000000 ----> 1000000000 bytes
--max-sql-memory=1GB ----> 1000000000 bytes
--max-sql-memory=1GiB ----> 1073741824 bytes

Default: 128MiB
--nodesSpecify the number of in-memory nodes to create for the demo.

Default: 1
--safe-updatesDisallow potentially unsafe SQL statements, including DELETE without a WHERE clause, UPDATE without a WHERE clause, and ALTER TABLE ... DROP COLUMN.

Default: true for ; false otherwise

Potentially unsafe SQL statements can also be allowed/disallowed for an entire session via the sql_safe_updates .
--setSet a client-side option before starting the SQL shell or executing SQL statements from the command line via --execute. This flag may be specified multiple times, once per option.

After starting the SQL shell, the \set and unset commands can be use to enable and disable client-side options as well.
--sql-portSpecifies a custom SQL port for the first node of the demo cluster.

In multi-node clusters, the SQL ports for additional clusters increase from the port of the first node, in increments of 1. For example, if the first node has the SQL port 3000, the second node will the SQL port 3001.
--with-loadRun a demo workload against the preloaded movr database.

When running a multi-node demo cluster, load is balanced across all nodes.

Logging

By default, the demo command does not log messages. If you need to troubleshoot this command’s behavior, you can .

SQL shell

Welcome text

When the SQL shell connects to the demo cluster at startup, it prints a welcome text with some tips and cluster details. Most of these details resemble the that is printed when connecting cockroach sql to a permanent cluster. cockroach demo also includes some connection parameters for connecting to the DB Console or for connecting another SQL client to the demo cluster.

Connection parameters

The SQL shell welcome text includes connection parameters for accessing the DB Console and for connecting other SQL clients to the demo cluster:
ParameterDescription
webuiUse this link to access a local to the demo cluster.
sqlUse this connection URL for standard sql/tcp connections from other SQL clients such as .
The default SQL port for the first node of a demo cluster is 26257.
sql/unixUse this connection URL to establish a with a client that is installed on the same machine.
You do not need to create or specify node and client certificates in sql or sql/unix connection URLs. Instead, you can securely connect to the demo cluster with the random password generated for the demo user.
When running a multi-node demo cluster, use the \demo ls shell command to list the connection parameters for all nodes:

Commands

General

The following commands can be used within the interactive SQL shell:
CommandUsage
\?,helpView this help within the shell.
\q,quit,exit,ctrl-dExit the shell.
When no text follows the prompt, ctrl-c exits the shell as well; otherwise, ctrl-c clears the line.
\!Run an external command and print its results to stdout. .
|Run the output of an external command as SQL statements. .
\set <option>,\unset <option>Enable or disable a client-side option. For more details, see Client-side options.
You can also use the --set flag to enable or disable client-side options before starting the SQL shell.
\p,\showDuring a multi-line statement or transaction, show the SQL that has been entered but not yet executed.
\show was deprecated as of v21.1. Use \p instead.
\h <statement>,\hf <function>View help for specific SQL statements or functions. See SQL shell help for more details.
\c <option>,\connect <option>Display or change the current . Using \c without an argument lists the current connection parameters.
To reuse the existing connection and change the current database, use \c <dbname>. This is equivalent to SET <database> and USE <database>.
To connect to a cluster using individual connection parameters, use \c <dbname> <user> <host> <port>. Use the dash character (-) to omit one parameter. To reconnect to the cluster using the current connection parameters enter \c -. When using individual connection parameters, the TLS settings from the original connection are reused. To use different TLS settings, connect using a connection URL.
To connect to a cluster using a use \c <url>
\lList all databases in the CockroachDB cluster. This command is equivalent to .
\d[S+] [<pattern]Show details about the relations in the current database. By default this command will show all the user tables, indexes, views, materialized views, and sequences in the current database. Add the S modifier to also show all system objects. If you specify a relation or a pattern, it will show the details of matching relations. Add the + modifier to show additional information.
\dC[+] [<pattern]Show the type casts. If you specify a type or a pattern, it will show the details of matching types. Add the + modifier to show additional information.
\dd[S] [<pattern]Show the objects of type constraint in the current database. Add the S modifier to also show all system objects. If you specify a type or a pattern, it will show the details of matching objects.
\df[S+] [<pattern]Show the of the current database. Add the S modifier to also show all . If you specify a function name or a pattern, it will show the details of matching function. Add the + modifier to show additional information.
\dg[S+] [<pattern]Show the of the current database. Add the S modifier to also show all system objects. If you specify a role name or a pattern, it will show the details of matching roles. Add the + modifier to show additional information.
\di[S+] [<pattern]Show the indexes of the current database. Add the S modifier to also show all system objects. If you specify an index name or a pattern, it will show the details of matching indexes. Add the + modifier to show additional information.
\dm[S+] [<pattern]Show the materialized views of the current database. Add the S modifier to also show all system objects. If you specify a materialized view name or a pattern, it will show the details of matching materialized views. Add the + modifier to show additional information.
\dn[S+] [<pattern]List all in the current database. Add the S modifier to also show all system schemas. Add the + modifier to show the permissions of each schema. Specify a pattern to limit the output to schemas that match the pattern. These commands are equivalent to .
\ds[S+] [<pattern]Show the sequences of the current database. Add the S modifier to also show all system objects. If you specify a sequence name or a pattern, it will show the details of matching sequences. Add the + modifier to show additional information.
\dt[S+] [<pattern]Show the tables of the current database. Add the S modifier to also show all system objects. If you specify a table name or a pattern, it will show the details of matching tables. Add the + modifier to show additional information.
\dT[S+] [<pattern]Show the in the current database. Add the S modifier to also show all system objects. If you specify a type name or a pattern, it will show the details of matching types. Add the + modifier to show additional information.
\du[S+] [<pattern]Show the of the current database. Add the S modifier to also show all system objects. If you specify a role name or a pattern, it will show the details of matching roles. Add the + modifier to show additional information.
\dv[S+] [<pattern]Show the views of the current database. Add the S modifier to also show all system objects. If you specify a view name or a pattern, it will show the details of matching views. Add the + modifier to show additional information.
\rResets the query input buffer, clearing all SQL statements that have been entered but not yet executed.
\statement-diag listList available .
\statement-diag download <bundle-id> [<filename]Download diagnostic bundle.
\i <filename>Reads and executes input from the file <filename, in the current working directory.
\ir <filename>Reads and executes input from the file <filename.
When invoked in the interactive shell, \i and \ir behave identically (i.e., CockroachDB looks for <filename in the current working directory). When invoked from a script, CockroachDB looks for <filename relative to the directory in which the script is located.
\echo <arguments>Evaluate the <arguments and print the results to the standard output.
\x <boolean>When true/on/yes/1, to records. When false/off/no/0, sets the session’s format to the default (table/tsv).

Patterns

Commands use the SQL for string pattern matching, not POSIX regular expressions. For example to list all schemas that begin with the letter “p” you’d use the following pattern:

Demo-specific

cockroach demo offers the following additional shell commands. Note that these commands are experimental and their interface and output are subject to change.
CommandUsage
\demo lsList the demo nodes and their connection URLs.
\demo add region=<region,zone=<zoneAdd a node to a single-region or multi-region demo cluster. See an example.
\demo shutdown <node number>Shuts down a node in a multi-node demo cluster.

This command simulates stopping a node that can be restarted. See an example.
\demo restart <node number>Restarts a node in a multi-node demo cluster. See an example.
\demo decommission <node number>Decommissions a node in a multi-node demo cluster.

This command simulates decommissioning a node.
\demo recommission <node number>Recommissions a decommissioned node in a multi-node demo cluster.

Client-side options

  • To view option descriptions and how they are currently set, use \set without any options.
  • To enable or disable an option, use \set <option> <value> or \unset <option> <value>. You can also use the form <option=<value.
  • If an option accepts a boolean value:
    • \set <option> without <value is equivalent to \set <option> true, and \unset <option> without <value is equivalent to \set <option> false.
    • on, yes, and 1 are aliases for true, and off, no, and 0 are aliases for false.
Client OptionsDescription
auto_traceFor every statement executed, the shell also produces the trace for that statement in a separate result below. A trace is also produced in case the statement produces a SQL error.

Default: off

To enable this option, run \set auto_trace on.
borderDisplay a border around the output of the SQL statement when using the table display format. Set the level of borders using border=<level to configure how many borders and lines are in the output, where <level is an integer between 0 and 3. The higher the integer, the more borders and lines are in the output.
A level of 0 shows the output with no outer lines and no row line separators.
A level of 1 adds row line separators. A level of 2 adds an outside border and no row line separators. A level of 3 adds both an outside border and row line separators.

Default: 0

To change this option, run \set border=<level. .
check_syntaxValidate SQL syntax. This ensures that a typo or mistake during user entry does not inconveniently abort an ongoing transaction previously started from the interactive shell.

Default: true for ; false otherwise.

To disable this option, run \unset check_syntax.
display_formatHow to display table rows printed within the interactive SQL shell. Possible values: tsv, csv, table, raw, records, sql, html.

Default: table for sessions that ; tsv otherwise

To change this option, run \set display_format <format>. .
echoReveal the SQL statements sent implicitly by the SQL shell.

Default: false

To enable this option, run \set echo. .
errexitExit the SQL shell upon encountering an error.

Default: false for ; true otherwise

To enable this option, run \set errexit.
prompt1Customize the interactive prompt within the SQL shell. See Customizing the prompt for information on the available prompt variables.
show_timesReveal the time a query takes to complete. Possible values:
  • execution time refers to the time taken by the SQL execution engine to execute the query.
  • network time refers to the network latency between the server and the SQL client command.
  • other time refers to all other forms of latency affecting the total query completion time, including query planning.
Default: true

To disable this option, run \unset show_times.

Customizing the prompt

The \set prompt1 option allows you to customize the interactive prompt in the SQL shell. Use the following prompt variables to set a custom prompt.
Prompt variableDescription
%>The port of the node you are connected to.
%/The current database name.
%MThe fully qualified host name and port of the node.
%mThe fully qualified host name of the node.
%nThe username of the connected SQL user.
%xThe transaction status of the current statement.
For example, to change the prompt to just the user, host, and database:

Help

Within the SQL shell, you can get interactive help about statements and functions:
CommandUsage
\h

??
List all available SQL statements, by category.
\hfList all available SQL functions, in alphabetical order.
\h <statement>

<statement ?
View help for a specific SQL statement.
\hf <function>

<function ?
View help for a specific SQL function.

Examples

Shortcuts

Note: macOS users may need to manually enable Alt-based shortcuts in their terminal configuration. See the section macOS terminal configuration below for details.
ShortcutDescription
TabUse context-sensitive command completion.
Ctrl+CClear/cancel the input.
Ctrl+M, EnterNew line/enter.
Ctrl+OForce a new line on the current statement, even if the statement has a semicolon.
Ctrl+F, Right arrowForward one character.
Ctrl+B, Left arrowBackward one character.
Alt+F, Ctrl+Right arrowForward one word.
Alt+B, Ctrl+Left arrowBackward one word.
Ctrl+LRefresh the display.
DeleteDelete the next character.
Ctrl+H, BackspaceDelete the previous character.
Ctrl+DDelete the next character, or terminate the input if the input is currently empty.
Alt+D, Alt+DeleteDelete next word.
Ctrl+W, Alt+BackspaceDelete previous word.
Ctrl+E, EndEnd of line.
Alt+>, Ctrl+EndMove cursor to the end of a multi-line statement.
Ctrl+A, HomeMove cursor to the beginning of the current line.
Alt+<, Ctrl+HomeMove cursor to the beginning of a multi-line statement.
Ctrl+TTranspose current and next characters.
Ctrl+KDelete from cursor position until end of line.
Ctrl+UDelete from beginning of line to cursor position.
Alt+QReflow/reformat the current line.
Alt+Shift+Q, Alt+`Reflow/reformat the entire input.
Alt+LConvert the current word to lowercase.
Alt+UConvert the current word to uppercase.
Alt+.Toggle the visibility of the prompt.
Alt+2, Alt+F2Invoke external editor on current input.
Alt+P, Up arrowRecall previous history entry.
Alt+N, Down arrowRecall next history entry.
Ctrl+RStart searching through input history.
When searching for history entries, the following shortcuts are active:
ShortcutDescription
Ctrl+C, Ctrl+GCancel the search, return to normal mode.
Ctrl+RRecall next entry matching current search pattern.
EnterAccept the current recalled entry.
BackspaceDelete previous character in search pattern.
OtherAdd character to search pattern.

Tab completion

The SQL client offers context-sensitive tab completion when entering commands. Use the Tab key on your keyboard when entering a command to initiate the command completion interface. You can then navigate to database objects, keywords, and functions using the arrow keys. Press the Tab key again to select the object, function, or keyword from the command completion interface and return to the console.

macOS terminal configuration

In Apple Terminal:
  1. Navigate to “Preferences”, then “Profiles”, then “Keyboard”.
  2. Enable the checkbox “Use Option as Meta Key”.
Apple Terminal Alt key configuration In iTerm2:
  1. Navigate to “Preferences”, then “Profiles”, then “Keys”.
  2. Select the radio button “Esc+” for the behavior of the Left Option Key.
iTerm2 Alt key configuration

Diagnostics reporting

By default, cockroach demo shares anonymous usage details with Cockroach Labs. To opt out, set the to false. You can also opt out by setting the environment variable to false before running cockroach demo.

Examples

In these examples, we demonstrate how to start a shell with cockroach demo. For more SQL shell features, see the .

Start a single-node demo cluster

By default, cockroach demo loads the movr dataset in to the demo cluster:
You can query the pre-loaded data:
You can also create and query new tables:

Start a multi-node demo cluster

Load a sample dataset into a demo cluster

By default, cockroach demo loads the movr dataset in to the demo cluster. To pre-load any of the other available datasets using cockroach demo <dataset>. For example, to load the ycsb dataset:

Run load against a demo cluster

This command starts a demo cluster with the movr database preloaded and then inserts rows into each table in the movr database. You can monitor the workload progress on the . When running a multi-node demo cluster, load is balanced across all nodes.

Execute SQL from the command-line against a demo cluster

Connect an additional SQL client to the demo cluster

In addition to the interactive SQL shell that opens when you run cockroach demo, you can use the connection parameters in the welcome text to connect additional SQL clients to the cluster.
  1. Use \demo ls to list the connection parameters for each node in the demo cluster:
  2. Open a new terminal and run with the --url flag set to the sql connection URL of the node to which you want to connect:
    You can also use this URL to connect an application to the demo cluster as the demo user.

Start a multi-region demo cluster

This command starts a 9-node demo cluster with the movr database preloaded and region and zone localities set at the cluster level.
The --global flag is an experimental feature of cockroach demo. The interface and output are subject to change.

Add, shut down, and restart nodes in a multi-node demo cluster

In a multi-node demo cluster, you can use \demo shell commands to add, shut down, restart, decommission, and recommission individual nodes.
This feature is in and subject to change. To share feedback and/or issues, contact Support.
cockroach demo does not support the \demo add and \demo shutdown commands in demo clusters started with the --global flag.
You can shut down and restart any node by node id. For example, to shut down the 3rd node and then restart it:
You can also decommission the 3rd node and then recommission it:
To add a new node to the cluster:

Try your own scenario

In addition to using one of the pre-loaded dataset, you can create your own database (e.g., ), or use the empty defaultdb database (e.g., ) to test our your own scenario involving any CockroachDB SQL features you are interested in.

See also