Postgresql ошибка ссылки между базами не реализованы

Есть таблица artist и user_artist

artist:
- id (PK)
- name
user_artist:
- id (PK)
- userId(FK)
- artistId(FK)
- added

Следующий запрос возвращает ошибку

ссылки между базами не реализованы: user_artist.added

return db.query(`
                SELECT artist.name  AS "artistName", artist.id AS "artistId", user_artist.added
                FROM user_artist
                INNER JOIN artist
                ON artist.id = user_artist."artistId"
                WHERE user_artist."userId" = $(userId) 
                AND user_artist.added::timestamp < to_timestamp($(index) / 1000)
                ORDER BY user_artist.added $(order)
                LIMIT $(limit);`, obj);

Если убрать ORDER BY user_artist.added $(order) то ошибка исчезает.
Вот точная структура таблица user_artist

create table user_artist
(
  "id" serial primary key,
  "userId" serial REFERENCES user (id) on delete cascade,
  "artistId" serial REFERENCES artist (id) on delete cascade,
  "added" timestamp,
  unique ("userId", "artistId")
);

Что не так?

Студворк — интернет-сервис помощи студентам

Здравствуйте, такая проблема, у меня есть задание :В базе данных basa1 имеется таблица Книга. Из базы данных basa2 необходимо выполнить действие по увеличению цены всех книг на 10%. В какой базе данных должна быть создана процедура и как можно ее выполнить?
Под это дело я написала нечто такое:

SQL
1
2
3
4
5
CREATE PROCEDURE my_proc4() AS $$
BEGIN
UPDATE basa1.dbl.Книга SET basa1.dbl.Книга.Цена =basa1.dbl.Книга.Цена*1.1 ;
END
$$ LANGUAGE 'plpgsql'

процедура создается, но когда пытаюсь ее вызвать пишет «ссылки между базами не реализованы: «basa1.dbl.Книга»»
как можно это исправить?
p.s. данный вариант составления процедуры не первый, и если раньше он эту процедуру даже заметить ее, то сейчас хоть понятно в чем проблема
p.s. p.s. Надеюсь код я занесла в правильные скобки

Содержание

  1. Ссылки между базами данных Postgresql не реализованы
  2. Сбой соединителя приемника Kafka jdbc для Postgres из-за того, что «ссылки между базами данных не реализованы»
  3. 2 ответа
  4. postgresql: ссылки на базы данных не реализованы:
  5. 5 ответов
  6. Можно ли выполнять межбазовые запросы с PostgreSQL?
  7. postgres_fdw
  8. Для версий Postgres до 9.3
  9. dblink () — выполняет запрос в удаленной базе данных
  10. SoundCloud в MP3
  11. SoundCloud Converter & Download Mp3 лучшего качества, 320 Кбит/с. Свободно. Все устройства
  12. Почему вы должны использовать конвертер SC SoundCloudtoMp3
  13. Как скачать SoundCloud в формате Mp3
  14. Скопируйте и вставьте ссылку на аудио музыку
  15. Конвертировать онлайн бесплатно
  16. Скачать SC Mp3
  17. Как скачать аудио музыку — Трек или плейлист
  18. Наши лучшие преимущества
  19. SoundCloudToMp3.Xyz — Лучший загрузчик Soundcloud
  20. SoundCloud Downloader
  21. Загрузчик MP3 треков SoundCloud
  22. Загрузчик MP3 плейлиста SoundCloud
  23. Часто задаваемые вопросы
  24. Зачем использовать SoundCloudToMp3.Xyz для загрузки Soundcloud Audio в файл Mp3?
  25. Есть ли ограничение на количество звуковых дорожек или списков воспроизведения Soundcloud, которые я могу конвертировать в файлы MP3?
  26. Как скачать музыку SoundCloud Mp3 на свой компьютер?
  27. Как скачать музыку SoundCloud Mp3 на телефон Android?
  28. Могу ли я загрузить песню из Soundcloud на свой iPhone?
  29. Как загрузить музыку SoundCloud Mp3 на свой iPhone (iOS)?
  30. Сколько песен я могу конвертировать одновременно?
  31. Могу ли я сохранить файл SoundCloud Mp3 на своем телефоне?
  32. Сколько времени нужно, чтобы преобразовать песню?
  33. Сохраняет ли SoundcloudToMp3.Xyz загруженные файлы или копию аудио?

Ссылки между базами данных Postgresql не реализованы

Я пытаюсь создать базу данных, а затем создать в ней таблицу. Я написал запрос в файле sql для использования образа postgres, используя docker-compose.yml

Когда я использую сборку docker-compose, а затем docker-compose up, я получаю сообщение об ошибке

«psql:/docker-entrypoint-initdb.d/init.sql:18: ERROR: cross-database references are not implemented: «real_estate.public.estate» postgres | LINE 1: CREATE TABLE real_estate.public.estate («

Вот мой файл init.sql

Вы получаете эту ошибку, потому что вы не подключены к базе данных real_estate .

Я предполагаю, что вы подключены к postgres , потому что это то, что вы обычно делаете для запуска CREATE DATABASE .

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

Это особенность, что разные базы данных строго разделены, и любой запрос на изменение, который будет отклонен.

Как это лучше всего сделать, зависит от того, как вы запускаете сценарий. Если вы запустите его с psql , подойдет простой c real_estate .

о, теперь это сработало, я добавил c real_estate после создания базы данных, и теперь в ней создана таблица, спасибо за ответ 🙂

Источник

Сбой соединителя приемника Kafka jdbc для Postgres из-за того, что «ссылки между базами данных не реализованы»

Моя установка основана на контейнерах докеров — 1 oracle db, kafka, kafka connect и postgres. Сначала я использую коннектор Oracle CDC для подачи kafka, который отлично работает. Затем я пытаюсь прочитать эту тему и загрузить ее в Postgres. Когда я запускаю коннектор, я получаю:

«trace»: «org.apache.kafka.connect.errors.ConnectException: выход из WorkerSinkTask из-за неисправимого исключения.ntat org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:614)n tat org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:329)ntat org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232)ntat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:201)ntat org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185)ntat org. apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:234)ntat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)ntat java. base/java.util.concurrent.FutureTask.run(FutureTask.java:264)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)ntat java.base/ java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)ntat java.base/java.lang .Thread.run(Thread.java:834)nВызвано: org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: Цепочка исключений:norg.postgresql.util.PSQLException: ОШИБКА: кросс-база данных ссылки не реализованы: «ORCLCDB.C__MYUSER.EMP»n Позиция: 14nntat io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:122)ntat org.apache .kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:586)nt. еще 10nВызвано: java.sql.SQLException: Цепочка исключений:norg.postgresql.util.PSQLException: ОШИБКА: ссылки между базами данных не реализованы: «ORCLCDB.C__MYUSER.EMP»n Позиция: 14nntat io.confluent.connect.jdbc.sink.JdbcSinkTask.getAllMessagesException(JdbcSinkTask.java:150)ntat io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:102)nt. еще 11n»

Мой конфиг json выглядит так:

Меня интересуют столбцы I и Name

2 ответа

Это также может быть вызвано тем, что имя базы данных в вашем connection.url не соответствует имени базы данных в вашем table.name.format. Недавно я испытал это и подумал, что это может помочь другим.

Глядя на журнал, я увидел, что коннектор имеет проблему с созданием таблицы с таким именем:

Источник

postgresql: ссылки на базы данных не реализованы:

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

  1. пользователи и таблица разрешений присутствуют в базе данных безопасности
  2. userrolemapping и отдел присутствуют в приложении БД

Я пытался, как показано ниже, но я получаю следующую ошибку

ошибка

Хранимая функция SQL

Хранимая функция PostgreSQL

5 ответов

Вы не можете объединять таблицы из разных баз данных.

Базы данных в PostgreSQL логически разделены по замыслу.

Если вы хотите объединить таблицы, вы должны поместить их в разные схемы в одной базе данных, а не в разные базы данных.

Обратите внимание, что то, что называется «база данных» в MySQL, называется «схемой» в стандартном SQL.

Для будущих поисков вы можете использовать dblink для подключения к другой базе данных.

В моем случае я изменил свой запрос с:

и это сработало.

У меня была такая же проблема с Postgres и JpaRepo, и я просто удалил dbname.public из запроса.

Новичок в postrgreSQL, и у меня было такое же требование. FOREIGN DATA WRAPPER сделал свое дело.

Но сначала мне нужно было:

включить расширение fdw

определить внешний сервер (который в данном случае был лока-хостом!)

создать сопоставление между локальным пользователем и внешним пользователем.

После этого я мог использовать чужие таблицы, как если бы они были локальными. Затрат на производительность я не заметил.

Источник

Можно ли выполнять межбазовые запросы с PostgreSQL?

Я собираюсь предположить, что ответ будет «нет» на основании приведенного ниже сообщения об ошибке (и этого результата Google ), но есть ли способ выполнить запрос между базами данных с использованием PostgreSQL?

Я работаю с некоторыми данными, которые разделены между двумя базами данных, хотя данные действительно разделяются между ними (столбцы идентификатора пользователя в одной базе данных берутся из users таблицы в другой базе данных). Понятия не имею, почему это две отдельные базы данных вместо схемы, но c’est la vie .

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

postgres_fdw

Используйте postgres_fdw (оболочку внешних данных) для подключения к таблицам в любой базе данных Postgres — локальной или удаленной.

Обратите внимание, что есть сторонние оболочки данных для других популярных источников данных . В настоящее время только postgres_fdw и file_fdw являются частью официального дистрибутива Postgres.

Для версий Postgres до 9.3

Эти старые версии больше не поддерживаются, но если вам нужно сделать это при установке Postgres до 2013 года, будет вызвана функция dblink .

Я никогда не использовал его, но он поддерживается и распространяется вместе с остальной частью PostgreSQL. Если вы используете версию PostgreSQL, которая поставляется с вашим дистрибутивом Linux, вам может потребоваться установить пакет под названием postgresql-contrib.

dblink () — выполняет запрос в удаленной базе данных

dblink executes a query (usually a SELECT, but it can be any SQL statement that returns rows) in a remote database.

When two text arguments are given, the first one is first looked up as a persistent connection’s name; if found, the command is executed on that connection. If not found, the first argument is treated as a connection info string as for dblink_connect, and the indicated connection is made just for the duration of this command.

один из хороших примеров:

Примечание: я даю эту информацию для использования в будущем. Ссылка

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

Просто чтобы добавить немного больше информации.

There is no way to query a database other than the current one. Because PostgreSQL loads database-specific system catalogs, it is uncertain how a cross-database query should even behave.

contrib/dblink allows cross-database queries using function calls. Of course, a client can also make simultaneous connections to different databases and merge the results on the client side.

Да, вы можете использовать DBlink (только postgresql) и DBI-Link (разрешает внешние запросы к базе данных) и TDS_LInk, который позволяет запускать запросы к серверу MS SQL.

Раньше я с большим успехом использовал DB-Link и TDS-link.

Если производительность важна и большинство запросов доступны только для чтения, я бы предложил реплицировать данные в другую базу данных. Хотя это кажется ненужным дублированием данных, оно может помочь, если требуются индексы.

Это можно сделать с помощью простых триггеров вставки, которые, в свою очередь, вызывают dblink для обновления другой копии. Есть также полноценные варианты репликации (например, Slony), но это не по теме.

Если кому-то нужен более сложный пример выполнения запросов между базами данных, вот пример, который очищает databasechangeloglock таблицу в каждой базе данных, в которой она есть:

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

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

DBLink и postgres_fdw действительно позволяют подключиться к и запросам к таблицам других баз данных, что невозможно со стандартным Postgres, но они не позволяют установить внешние отношения ключевых между таблицами в различных базах данных.

В наши дни у вас также есть возможность использовать https://prestodb.io/

Вы можете запустить SQL на этом узле PrestoDB, и он будет распространять SQL-запрос по мере необходимости. Он может подключаться к одному и тому же узлу дважды для разных баз данных или может подключаться к разным узлам на разных хостах.

Поэтому вы должны использовать его только для нужд SELECT и JOIN. Подключитесь напрямую к каждой базе данных для вышеуказанных потребностей. (Похоже, вы также можете ВСТАВИТЬ или ОБНОВИТЬ, что приятно)

Клиентские приложения подключаются к PrestoDB в основном с помощью JDBC , но возможны и другие типы подключения, включая веб-API, совместимый с Tableu.

Это инструмент с открытым исходным кодом, управляемый Linux Foundation и Presto Foundation.

The founding members of the Presto Foundation are: Facebook, Uber, Twitter, and Alibaba.

The current members are: Facebook, Uber, Twitter, Alibaba, Alluxio, Ahana, Upsolver, and Intel.

Источник

SoundCloud в MP3

SoundCloud Converter & Download Mp3 лучшего качества, 320 Кбит/с. Свободно. Все устройства

Почему вы должны использовать конвертер SC SoundCloudtoMp3

SoundCloudtoMp3.xyz это бесплатное онлайн-приложение, которое позволяет вам конвертировать и скачать музыка в MP3 высокого качества формате без необходимости установки какого-либо программного обеспечения на ваш компьютер

Скачивайте много музыки из SoundCloud с помощью нашего Конвертер SoundCloud в mp3 и слушайте их где угодно, сохраняя их на своем iPod, компьютере или телефоне с помощью нашего сверхбыстрого сервиса загрузки.

Как скачать SoundCloud в формате Mp3

Скопируйте и вставьте ссылку на аудио музыку

Enter the URL of the SoundCloud song you want to convert & Download.

Конвертировать онлайн бесплатно

Нажмите «Конвертер», чтобы начать процесс конвертации.

Скачать SC Mp3

Нажмите кнопку Download Mp3, чтобы скачать

Как скачать аудио музыку — Трек или плейлист

  • 1. Скопируйте и вставьте URL-адрес Soundcloud [трек или список воспроизведения], который вы хотите преобразовать.
  • 2. Нажмите кнопку «Конвертер»
  • 3. Подождите, пока панель процесса должна завершиться
  • 4. Когда процесс преобразования завершится, загрузите файл по предоставленной ссылке.

Наши лучшие преимущества

    Регистрация не требуется Наши услуги бесплатны Не требуется загрузка или установка программного обеспечения Нет ограничений на загрузку и конвертацию Супер быстрые преобразования Бесплатная музыка в формате MP3 и высочайшее качество

SoundCloudToMp3.Xyz — Лучший загрузчик Soundcloud

SoundCloud Downloader

SoundCloudToMp3.xyz help you convert and download all kinds of audio, music from SoundCloud then save to your device with the best quality. Songs as: track, playlist, artist, library, feed. are all easily downloaded and saved from SC with just a few clicks via our website

Загрузчик MP3 треков SoundCloud

SoundCloud mp3 can download songs from track, artist, library, feed. SoundCloudToMp3 also allows you to download all playlist in the best quality. The implementation process will be more complicated than regular single mp3 track, details at: https://soundcloudtomp3.xyz/terms

Загрузчик MP3 плейлиста SoundCloud

SoundCloudToMp3 also could download mp3 songs private at best quality. All you need is to befriend the creator of the track on SC and can see that list or track, if you have permission and can view song track or list, SoundCloudToMp3.xyz can download it for you

Часто задаваемые вопросы

Зачем использовать SoundCloudToMp3.Xyz для загрузки Soundcloud Audio в файл Mp3?

Судя по отзывам пользователей, SoundcloudToMp3.Xyz — лучший SoundCloud to Mp3 бесплатный инструмент прямо сейчас, у нас есть самое быстрое сохранение Mp3 из Soundcloud для вас, мы всегда бесплатно с лучшим качеством.

Есть ли ограничение на количество звуковых дорожек или списков воспроизведения Soundcloud, которые я могу конвертировать в файлы MP3?

Нет ограничений на количество файлов, которые вы можете конвертировать, вы можете скачать все, что захотите!

Как скачать музыку SoundCloud Mp3 на свой компьютер?

1: введите URL-адрес. 2: Нажмите кнопку «Преобразовать». 3: Скачайте и наслаждайтесь! Вы можете увидеть полную инструкцию здесь: Link

Как скачать музыку SoundCloud Mp3 на телефон Android?

Просто, так же, как вы загружаете на свой компьютер, просто введите URL-адрес, затем нажмите «Преобразовать и загрузить». Вы можете увидеть полную инструкцию здесь: Link

Могу ли я загрузить песню из Soundcloud на свой iPhone?

Да, вы можете конвертировать и загружать песни Soundcloud MP3 со своего iPhone или iPad (iOS). Бесплатная музыка в формате MP3, если вы используете SoundcloudToMp3.Xyz для загрузки.

Как загрузить музыку SoundCloud Mp3 на свой iPhone (iOS)?

Просто скопируйте и вставьте ссылку SC на наш веб-сайт, нажмите «Конвертировать», а затем нажмите «Загрузить» в информации.

Сколько песен я могу конвертировать одновременно?

С одной дорожкой песни вы можете конвертировать 1 дорожку за раз. Но с плейлистом песни вы можете преобразовать всю песню в плейлист один раз

Могу ли я сохранить файл SoundCloud Mp3 на своем телефоне?

Конечно, сохраняя музыкальные файлы Audio на свой компьютер после завершения загрузки, вы можете найти их в папке «Загрузки» на мобильном телефоне с Windows или Android. С iPhone вы можете найти в месте загрузки по умолчанию.

Сколько времени нужно, чтобы преобразовать песню?

Зависит от длины оригинальной песни и времени суток

Сохраняет ли SoundcloudToMp3.Xyz загруженные файлы или копию аудио?

НЕТ, SoundcloudToMp3.Xyz не размещает файлы Mp3 и не хранит копии загруженного аудио. Мы поддерживаем вас скачать музыку и без архива. Все аудио хранятся на серверах SoundCloud и загружаются только на ваше устройство.

Источник

Перейти к контенту

I am trying to convert SQL inner join query into PostgreSQL inner join query. In this inner join query which tables are using that all tables are not present in one database. we separated tables into two databases i.e. application db and security db

  1. users and permission table are present in security db
  2. userrolemapping and department are present in application db

I tried like below but I am getting following error

Error

ERROR:  cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4:         INNER JOIN "Rockefeller_ApplicationDb".public.userro..

SQL Stored Function

SELECT   Department.nDeptID 
    FROM Users INNER JOIN Permission 
         ON Users.nUserID = Permission.nUserID INNER JOIN UserRoleMapping
         ON Users.nUserID = UserRoleMapping.nUserID INNER JOIN Department
         ON Permission.nDeptInst = Department.nInstID
         AND  Department.nInstID = 60
    WHERE     
         Users.nUserID = 3;

PostgreSQL Stored Function

SELECT dep.ndept_id 
        FROM "Rockefeller_SecurityDb".public.users as  u 
        INNER JOIN  "Rockefeller_SecurityDb".public.permissions p ON u.nuser_id = p.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.userrolemapping as urm ON u.nuser_id = urm.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.department dep ON p.ndept_inst = dep.ninst_id
           AND  dep.ninst_id = 60
                        WHERE     
                            u.nuser_id = 3;

Braiam's user avatar

asked Aug 10, 2018 at 10:52

SpringUser's user avatar

1

You cannot join tables from different databases.

Databases are logically separated in PostgreSQL by design.

If you want to join the tables, you should put them into different schemas in one database rather than into different databases.

Note that what is called “database” in MySQL is called a “schema” in standard SQL.

If you really need to join tables from different databases, you need to use a foreign data wrapper.

answered Aug 10, 2018 at 12:43

Laurenz Albe's user avatar

Laurenz AlbeLaurenz Albe

202k17 gold badges190 silver badges247 bronze badges

8

For future searchs, you can to use dblink to connect to other database.

Follow commands:

create extension dblink;

SELECT dblink_connect('otherdb','host=localhost port=5432 dbname=otherdb user=postgres password=???? options=-csearch_path=');

SELECT * FROM dblink('otherdb', 'select field1, field2 from public.tablex')
AS t(field1 text, field2 text);

answered Jul 22, 2020 at 11:58

rafaelnaskar's user avatar

New to postrgreSQL and I had the same requirement. FOREIGN DATA WRAPPER did the job.

IMPORT FOREIGN SCHEMA — import table definitions from a foreign server

But first I had to:

  1. enable the fdw extension

  2. define the foreign server (which was the locahost in this case!)

  3. create a mapping between the local user and the foreign user.

CREATE EXTENSION postgres_fdw;

CREATE SERVER localsrv
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'otherdb', port '5432');

CREATE USER MAPPING FOR <local_user>
SERVER localsrv
OPTIONS (user 'ohterdb_user', password 'ohterdb_user_password');

IMPORT FOREIGN SCHEMA public
FROM SERVER localsrv 
INTO public;

After that I could use the foreign tables as if they were local. I did not notice any performance cost.

Jeremy Caney's user avatar

Jeremy Caney

7,00461 gold badges48 silver badges76 bronze badges

answered Dec 6, 2021 at 20:40

Antony Economou's user avatar

In my case, I changed my query from:

SELECT * FROM myDB.public.person

to this:

SELECT * FROM "myDB".public.cats

and it worked.

You can read more at mathworks.com.

Timothy Alexis Vass's user avatar

answered Feb 20, 2022 at 9:57

Behnam's user avatar

BehnamBehnam

9912 gold badges14 silver badges38 bronze badges

Есть таблица artist и user_artist

artist:
- id (PK)
- name
user_artist:
- id (PK)
- userId(FK)
- artistId(FK)
- added

Следующий запрос возвращает ошибку

ссылки между базами не реализованы: user_artist.added
return db.query(`
                SELECT artist.name  AS "artistName", artist.id AS "artistId", user_artist.added
                FROM user_artist
                INNER JOIN artist
                ON artist.id = user_artist."artistId"
                WHERE user_artist."userId" = $(userId) 
                AND user_artist.added::timestamp < to_timestamp($(index) / 1000)
                ORDER BY user_artist.added $(order)
                LIMIT $(limit);`, obj);

Если убрать ORDER BY user_artist.added $(order) то ошибка исчезает.
Вот точная структура таблица user_artist

create table user_artist
(
  "id" serial primary key,
  "userId" serial REFERENCES user (id) on delete cascade,
  "artistId" serial REFERENCES artist (id) on delete cascade,
  "added" timestamp,
  unique ("userId", "artistId")
);

Что не так?

Студворк — интернет-сервис помощи студентам

Здравствуйте, такая проблема, у меня есть задание :В базе данных basa1 имеется таблица Книга. Из базы данных basa2 необходимо выполнить действие по увеличению цены всех книг на 10%. В какой базе данных должна быть создана процедура и как можно ее выполнить?
Под это дело я написала нечто такое:

SQL
1
2
3
4
5
CREATE PROCEDURE my_proc4() AS $$
BEGIN
UPDATE basa1.dbl.Книга SET basa1.dbl.Книга.Цена =basa1.dbl.Книга.Цена*1.1 ;
END
$$ LANGUAGE 'plpgsql'

процедура создается, но когда пытаюсь ее вызвать пишет «ссылки между базами не реализованы: «basa1.dbl.Книга»»
как можно это исправить?
p.s. данный вариант составления процедуры не первый, и если раньше он эту процедуру даже заметить ее, то сейчас хоть понятно в чем проблема
p.s. p.s. Надеюсь код я занесла в правильные скобки

Вы получаете эту ошибку, потому что вы не подключены к базе данных real_estate.

Я предполагаю, что вы подключены к postgres, потому что это то, что вы обычно делаете для запуска CREATE DATABASE.

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

Это особенность, что разные базы данных строго разделены, и любой запрос на изменение, который будет отклонен.

Как это лучше всего сделать, зависит от того, как вы запускаете сценарий. Если вы запустите его с psql, подойдет простой c real_estate.

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

  1. пользователи и таблица разрешений присутствуют в базе данных безопасности
  2. сопоставление ролей пользователя и отдел присутствуют в базе данных приложения

Я пробовал, как показано ниже, но получаю следующую ошибку

Ошибка

ERROR:  cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4:         INNER JOIN "Rockefeller_ApplicationDb".public.userro..

Сохраненная функция SQL

SELECT   Department.nDeptID 
    FROM Users INNER JOIN Permission 
         ON Users.nUserID = Permission.nUserID INNER JOIN UserRoleMapping
         ON Users.nUserID = UserRoleMapping.nUserID INNER JOIN Department
         ON Permission.nDeptInst = Department.nInstID
         AND  Department.nInstID = 60
    WHERE     
         Users.nUserID = 3;

Сохраненная функция PostgreSQL

SELECT dep.ndept_id 
        FROM "Rockefeller_SecurityDb".public.users as  u 
        INNER JOIN  "Rockefeller_SecurityDb".public.permissions p ON u.nuser_id = p.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.userrolemapping as urm ON u.nuser_id = urm.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.department dep ON p.ndept_inst = dep.ninst_id
           AND  dep.ninst_id = 60
                        WHERE     
                            u.nuser_id = 3;

4 ответа

Вы не можете соединять таблицы из разных баз данных.

Базы данных логически разделены в PostgreSQL.

Если вы хотите соединить таблицы, вы должны поместить их в разные схемы в одной базе данных, а не в разные базы данных.

Обратите внимание, что то, что называется «базой данных» в MySQL, называется «схемой» в стандартном SQL.

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


29

Laurenz Albe
8 Янв 2019 в 10:09

Для будущих поисков вы можете использовать dblink для подключения к другой базе данных.

Следуйте командам:

create extension dblink;

SELECT dblink_connect('otherdb','host=localhost port=5432 dbname=otherdb user=postgres password=???? options=-csearch_path=');

SELECT * FROM dblink('otherdb', 'select field1, field2 from public.tablex')
AS t(field1 text, field2 text);


6

rafaelnaskar
22 Июл 2020 в 14:58

У меня была такая же проблема с Postgres и JpaRepo, и я просто удалил dbname.public из запроса.


0

Krizsán Balazs
19 Авг 2021 в 19:43

Новичок в postrgreSQL, и у меня было такое же требование. FOREIGN DATA WRAPPER сделал свое дело.

IMPORT FOREIGN SCHEMA — импорт определений таблиц с внешнего сервера.

Но сначала мне нужно было:

  1. включить расширение fdw

  2. определить внешний сервер (который в данном случае был лока-хостом!)

  3. создать сопоставление между локальным пользователем и внешним пользователем.

CREATE EXTENSION postgres_fdw;

CREATE SERVER localsrv
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'otherdb', port '5432');

CREATE USER MAPPING FOR <local_user>
SERVER localsrv
OPTIONS (user 'ohterdb_user', password 'ohterdb_user_password');

IMPORT FOREIGN SCHEMA public
FROM SERVER localsrv 
INTO public;

После этого я мог использовать чужие таблицы, как если бы они были локальными. Затрат на производительность я не заметил.


0

Jeremy Caney
7 Дек 2021 в 03:33

Вы получаете эту ошибку, потому что вы не подключены к базе данных real_estate.

Я предполагаю, что вы подключены к postgres, потому что это то, что вы обычно делаете для запуска CREATE DATABASE.

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

Это особенность, что разные базы данных строго разделены, и любой запрос на изменение, который будет отклонен.

Как это лучше всего сделать, зависит от того, как вы запускаете сценарий. Если вы запустите его с psql, подойдет простой c real_estate.

Понравилась статья? Поделить с друзьями:
  • Postal 2 критическая ошибка coop
  • Post коды ошибок bios сигналы
  • Post карта коды ошибок на русском языке
  • Post карта pci коды ошибок
  • Post error dors 800 как исправить ошибку