Specifying different databases
MotherDuck enables you to specify an active/current database and an active/current schema within that database.
Queryable objects (e.g. tables) that belong to the current database are resolved with just <object_name>
.
MotherDuck will automatically search all schemas within the current database.
If there are overlapping names within different schemas, objects can be qualified with <schema_name>.<object_name>
.
Queryable objects in your account outside of the active/current database are resolved with <database_name>.<object_name>
.
However, if a schema in the current database shares the same name as another database, the fully qualified name must be used: <database_name>.<schema_name>.<object_name>
(an error will be thrown to indicate the ambiguity).
This applies to databases that both live in MotherDuck and in your local DuckDB environment.
For example:
- CLI
-- check your current database
SELECT current_database();
dbname
-- check your current schema
SELECT current_schema();
main
-- query a table mytable that exists in the current database dbname
SELECT count(*) FROM mytable;
34
-- query a table mytable2 that exists in the database dbname2
SELECT count(*) FROM dbname2.mytable2;
41
-- query a table mytable3 that exists in schema2
-- note that the syntax is identical to the database name syntax above and
-- MotherDuck will detect whether a database or schema is involved
SELECT count(*) FROM schema2.mytable3
42
-- query a table in another database when a schema exists with the same name in the current database
-- (overlappingname is both a database name and a schema name)
SELECT count(*) FROM overlappingname.myschemaname.mytable4
43
You can also reference local databases in the same MotherDuck queries. This type of query is known as a hybrid query.
To change the active database, schema, or database/schema combination, execute a USE
command.
See the documentation on switching the current database for details.