Как получить доступ к таблицам в другой схеме в корме?

В SQL доступ к таблицам в другой схеме прост:

select * 
from other_schema.t
where ...

Как я могу сделать это в корме? Что я на самом деле должен сделать, это получить доступ information_schema.tables Таблица. Так что определяя другой db от defdb не поможет

Я попытался определить сущность, однако не удалось.

(defentity information_schema.tables)

2 ответа

Решение

Я должен знать, что есть способ указать базовую таблицу при определении сущности. При указании базовой таблицы она позволяет установить схему с .,

(defentity tables
  (table :information_schema.tables))

Это прекрасно работает для доступа information_schema.tables таблица, не определяя другую базу данных.

Вы должны быть в состоянии сделать это, определив другую базу данных. Я могу создать БД, как это:

CREATE database my_db;
USE my_db;
CREATE TABLE stuff (
  things VARCHAR(255)
);
INSERT INTO stuff (things) VALUES ("some things");

Теперь я определяю две базы данных и сущности Korma и запрашиваю их:

(defdb my-db (mysql {:host "localhost" 
                     :port 3306 
                     :db "my_db"
                     :user "root"
                     :password nil}))

(defdb information-schema (mysql {:host "localhost" 
                                  :port 3306 
                                  :db "information_schema" 
                                  :user "root" 
                                  :password nil}))


(defentity stuff)

(defentity information-schema)

(select stuff
        (database my-db))

;; => ({:things "some things"})

(select TABLES 
        (database information-schema) 
        (fields :TABLE_SCHEMA :TABLE_NAME) 
        (where {:TABLE_SCHEMA "my_db"}))

;; => ({:TABLE_NAME "stuff", :TABLE_SCHEMA "my_db"})
Другие вопросы по тегам