Nano Hash - криптовалюты, майнинг, программирование

выбрать все ссылочные таблицы

Например: Скажем, у меня есть 2 схемы и 4 таблицы, созданные как

    create table a.foo(
      id integer primary key,
      val integer);

    create table b.main(
      id serial primary key,
      val integer references a.foo(id));

    create table b.foo(
      k integer primary key references b.main(id),
      v timestamp with time zone);

    create table b.bar(
      k integer primary key references b.main(id),
      v timestamp with time zone);

Псевдокод для того, что я ищу: выберите все таблицы, на которые ссылается b.main.id;

Результаты будут выглядеть так:

    b.main.id | b.main.val | b.foo.k | b.foo.v | b.bar.k | b.bar.v
       1           1           1      TimeStamp    1      TimeStamp
       2           1           2        ....       2        ....

Прямо сейчас я реализовал этот запрос как:

   select * from b.main,
            (select *
               from b.foo,
                   (select * from b.bar where b.bar.v > somedate) as morebar
              where b.bar.k = b.foo.k) as morefoo
    where b.main.id = b.foo.k;

Вернемся к вопросу. Есть ли в Postgres функция, позволяющая выполнять выборку всех таблиц, ссылающихся на первичный ключ? В моем случае все таблицы, ссылающиеся на b.main.id.

Я просмотрел документацию Postgresql, но еще не нашел то, что ищу. Предложения?

09.10.2012

  • Привет @fbynite, мой ответ не сработал? Этот запрос похож на select all tables where b.main.id is referenced; 11.10.2012

Ответы:


1

Мне еще предстоит найти способ автоматически выбирать другие таблицы, которые ссылаются на первичный ключ таблицы. Кажется, вам все еще нужно упомянуть/ввести другую таблицу вручную в своем запросе, но вот короткая версия вашего запроса с использованием соединения:

select *
from b.main a, b.foo b, b.bar c
where a.id = b.k
and a.id = c.k

or

select a.*, b.*, c.*
from b.main as a
inner join b.foo as b on a.id = b.k
inner join b.bar as c on a.id = c.k
09.10.2012
  • Как и вы, мне еще предстоит найти способ выбрать все строки/столбцы, в которых упоминается первичный ключ. Я ценю альтернативные запросы, которые вы предоставили. Спасибо. 15.11.2012

  • 2

    Можешь попробовать:

    SELECT tc.constraint_name, tc.table_name, kcu.column_name,
           ccu.table_schema AS foreign_schema,
           ccu.table_name AS foreign_table_name,
           ccu.column_name AS foreign_column_name
    FROM information_schema.table_constraints AS tc 
    JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
    JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
    WHERE constraint_type = 'FOREIGN KEY'
    AND ccu.table_schema = 'b'
    AND ccu.table_name='main'
    AND ccu.column_name = 'id';
    
    10.10.2012
  • Ваш ответ был больше похож на выбор всех имен таблиц, на которые ссылается b.main.id. Я что-то пропустил? Результаты, на которые я надеялся, будут (по сути) объединением всех таблиц, которые ссылаются на первичный ключ. 11.10.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..