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
- users and permission table are present in security db
- 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;
asked Aug 10, 2018 at 10:52
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 AlbeLaurenz Albe
191k17 gold badges175 silver badges229 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
![]()
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:
-
enable the fdw extension
-
define the foreign server (which was the locahost in this case!)
-
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
6,79354 gold badges48 silver badges74 bronze badges
answered Dec 6, 2021 at 20:40
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.
![]()
answered Feb 20, 2022 at 9:57
BehnamBehnam
9411 gold badge14 silver badges38 bronze badges
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
- users and permission table are present in security db
- 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;
asked Aug 10, 2018 at 10:52
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 AlbeLaurenz Albe
191k17 gold badges175 silver badges229 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
![]()
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:
-
enable the fdw extension
-
define the foreign server (which was the locahost in this case!)
-
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
6,79354 gold badges48 silver badges74 bronze badges
answered Dec 6, 2021 at 20:40
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.
![]()
answered Feb 20, 2022 at 9:57
BehnamBehnam
9411 gold badge14 silver badges38 bronze badges
I am completely new to SQL, PostgreSQL, and DBeaver. When trying to simply query a table from a database:
SELECT * FROM operation.fs.ten_q_score;
I get the following error:
SQL Error [0A000]: ERROR: cross-database references are not implemented: "operation.fs.ten_q_score"¶ Position: 15
I have looked at the dblink, but do not even understand how to install something like dblink (even after looking at the actual documentation).
Any guidance is much appreciated!
asked Sep 6, 2017 at 14:32
Graham StreichGraham Streich
8643 gold badges13 silver badges31 bronze badges
4
Maybe it will help someone, if you have several connection then you have to right click on connection your are going to work with and set it as active, after that when you press F3 button you will have an access to your currently selected database.

answered Dec 6, 2018 at 9:53
Gh111Gh111
1,32418 silver badges18 bronze badges
2
Add connection here

choose PostgreSQL and type in your connection:

finish setting up connection, connect to db and run
SELECT * FROM fs.ten_q_score;
answered Sep 7, 2017 at 12:07
![]()
Vao TsunVao Tsun
45.5k10 gold badges93 silver badges124 bronze badges
1
очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.
Когда я добираюсь до обновления, он выдает ошибку:
{"ERROR [0A000] ERROR: cross-database references are not implemented: "openerp.public.product_template"; Error while executing the query"}.
Я использую vb.net и postgresql 9.2.
Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.
log:
LOG 0 duration: 34.000 ms statement: SELECT * FROM product_template where import_date = '08/22/2013'
LOG 0 duration: 11.000 ms statement: select n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 20496) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum
LOG 0 duration: 12.000 ms parse _PLAN000000001D2CFB60: SELECT * FROM product_template where import_date = '08/22/2013'
LOG 0 duration: 11.000 ms statement: select ta.attname, ia.attnum, ic.relname, n.nspname, tc.relname from pg_catalog.pg_attribute ta, pg_catalog.pg_attribute ia, pg_catalog.pg_class tc, pg_catalog.pg_index i, pg_catalog.pg_namespace n, pg_catalog.pg_class ic where tc.oid = 20496 AND tc.oid = i.indrelid AND n.oid = tc.relnamespace AND i.indisprimary = 't' AND ia.attrelid = i.indexrelid AND ta.attrelid = i.indrelid AND ta.attnum = i.indkey[ia.attnum-1] AND (NOT ta.attisdropped) AND (NOT ia.attisdropped) AND ic.oid = i.indexrelid order by ia.attnum
LOG 0 duration: 0.000 ms statement: select current_schema()
LOG 0 duration: 1.000 ms statement: select c.relhasrules, c.relkind, c.relhasoids from pg_catalog.pg_namespace u, pg_catalog.pg_class c where u.oid = c.relnamespace and c.relname = 'product_template' and u.nspname = 'public'
LOG 0 duration: 1.000 ms statement: select c.relhasrules, c.relkind, c.relhasoids from pg_catalog.pg_namespace u, pg_catalog.pg_class c where u.oid = c.relnamespace and c.relname = 'product_template' and u.nspname = 'public'
ERROR 0A000 cross-database references are not implemented: "openerp.public.product_template"
Код:
Private Sub btnChgNameToDescr_Click(sender As Object, e As EventArgs) Handles btnChgNameToDescr.Click
Dim objConn As New System.Data.Odbc.OdbcConnection
Dim objCmd As New System.Data.Odbc.OdbcCommand
Dim dtAdapter As New System.Data.Odbc.OdbcDataAdapter
Dim ds As New DataSet
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
Dim strConnString As String
Dim strSQL As String
Dim iRecCount As Integer
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
If objConn.State = ConnectionState.Open Then
'do nothing
Else
strConnString = "Dsn=PostgreSQL35W;database=OpenERP;server=localhost;port=5432;uid=openpg;pwd=openpgpwd"
objConn.ConnectionString = strConnString
objConn.Open()
End If
If Me.txtImportDate.Text = "" Then
MsgBox("Import Date field cannot be blank.")
Exit Sub
End If
Dim str_import_date As String = Me.txtImportDate.Text
strSQL = "SELECT * FROM product_template where import_date = " & "'" & str_import_date & "'"
dtAdapter.SelectCommand = objCmd
With objCmd
.Connection = objConn
.CommandText = strSQL
.CommandType = CommandType.Text
.ExecuteNonQuery()
dtAdapter.Fill(ds, "product_template")
iRecCount = ds.Tables("product_template").Rows.Count
End With
If iRecCount = 0 Then
MsgBox("No records found.")
Me.Cursor = System.Windows.Forms.Cursors.Default
Exit Sub
End If
Dim cb As New Odbc.OdbcCommandBuilder(dtAdapter)
'change the name field to item_description
With ds
For i As Integer = 0 To .Tables("product_template").Rows.Count - 1
'this works, returns a string
Dim str_default_code As String = (.Tables(0).Rows(i).Item("name").ToString)
'this works
Dim str_item_description As String = (.Tables(0).Rows(i).Item("description").ToString)
.Tables("product_template").Rows(i).Item("name") = str_item_description
'setting the variable doesn't work either - Dim str_item_description As String = "BH LITE BRT"
'this throws the error
dtAdapter.Update(ds, "product_template")
Next
End With
Me.Cursor = System.Windows.Forms.Cursors.Default
End Sub
Я пытаюсь преобразовать запрос внутреннего соединения SQL в запрос внутреннего соединения PostgreSQL. В этом запросе внутреннего соединения, какие таблицы используют, не все таблицы присутствуют в одной базе данных. мы разделили таблицы на две базы данных, то есть базу данных приложений и базу данных безопасности.
- пользователи и таблица разрешений присутствуют в базе данных безопасности
- сопоставление ролей пользователя и отдел присутствуют в базе данных приложения
Я пробовал, как показано ниже, но получаю следующую ошибку
Ошибка
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 — импорт определений таблиц с внешнего сервера.
Но сначала мне нужно было:
-
включить расширение fdw
-
определить внешний сервер (который в данном случае был лока-хостом!)
-
создать сопоставление между локальным пользователем и внешним пользователем.
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
Я пытаюсь преобразовать запрос внутреннего соединения SQL в запрос внутреннего соединения PostgreSQL. В этом внутреннем запросе соединения, в котором используются таблицы, все таблицы не присутствуют в одной базе данных. мы разделили таблицы на две базы данных, например, приложение db и security db
- пользователи и таблица разрешений присутствуют в security db
- userrolemapping и отдел присутствуют в приложении db
Я пробовал, как показано ниже, но я получаю следующую ошибку
ошибка
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;