Sql error 0a000 ошибка ссылки между базами не реализованы

Ссылки между базами данных 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 | […]

Содержание

  1. Ссылки между базами данных Postgresql не реализованы
  2. Обсуждение: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
  3. SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
  4. Re: SQL Error [0A000]: ERROR: nondeterministic collations are not supported for LIKE
  5. Re: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE
  6. Почему я получаю «ссылки между базами данных не реализованы»?
  7. 5 ответов
  8. Почему я получаю «ссылки между базами данных не реализованы»?
  9. 5 ответы
  10. Почему я получаю «ссылки между базами данных не реализованы»?
  11. 5 ответов

Ссылки между базами данных 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 после создания базы данных, и теперь в ней создана таблица, спасибо за ответ 🙂

Источник

Обсуждение: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE

SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE

Re: SQL Error [0A000]: ERROR: nondeterministic collations are not supported for LIKE

Re: SQL Error [0A000]: ERROR: nondeterministic collations are notsupported for LIKE

> I have a question about nondeterministic collations in PostgreSQL 12. I
> have created a new collation that is nondeterministic and created several
> columns which use this collation. Querying these columns works great until
> I use LIKE. When I do, I get the following error:
>
> SQL Error [0A000]: ERROR: nondeterministic collations are not supported for
> LIKE
>
> Is there any plan to allow this functionality?

PostgreSQL development is conducted without a roadmap [1]. Maybe
someone will submit a patch to enable LIKE with nondeterministic
collations, but so far it did not happen according to the current set
of patches at https://commitfest.postgresql.org

Such matches can be weirder than you might think (not to
mention much slower).
Consider for instance a collation that ignores punctuation:

CREATE COLLATION «nd3alt» (
provider = ‘icu’,
locale=’und@colAlternate=shifted’,
deterministic = false
);

In the icu_ext extension, icu_strpos [2] can match a substring with
a nondeterministic collation, which is one part of what LIKE
would need to do for such collations. The implementation uses
the string search facility of the ICU library.

With the above-defined collation, we can have for instance:

SELECT icu_strpos(‘abc. . de’, ‘c,d’ COLLATE nd3alt);
icu_strpos
————
3

So even though ‘c,d’ is not a substring of ‘abc. . de’ in the common
sense, it is recognized as such by this collation, by design.

A LIKE operator for nondeterministic collations should be able to
recognize this too, but with an arbitrary number of substrings to
match in the pattern, plus it should handle the underscore wildcard
in a way that hopefully makes sense.

With the example above,
‘abc. . de’ LIKE ‘%c,d%’ COLLATE nd3alt
should certainly be a match, but in the case of this variant:
‘abc. . de’ LIKE ‘%c_d%’ COLLATE nd3alt
it’s not necessarily clear how (or even if) it should work.

Источник

Почему я получаю «ссылки между базами данных не реализованы»?

Очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.

Когда я добираюсь до обновления, он выдает ошибку:

Я использую vb.net и postgresql 9.2.

Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.

5 ответов

Если вы столкнулись с этой ошибкой в ​​DBeaver, активация целевой базы данных может решить ее:

Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.

При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.

У меня была такая же проблема с использованием DataGrip (версия 2020.3).

В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.

Я нашел 2 способа решить эту проблему:

  1. Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
  2. Откройте новое окно консоли

Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.

Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен — schema.table.column или schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column , она прочитает это как database.schema.table и выдаст эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также вызовет ошибку).

Это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.

Источник

Почему я получаю «ссылки между базами данных не реализованы»?

очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.

Когда я добираюсь до обновления, он выдает ошибку:

Я использую vb.net и postgresql 9.2.

Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.

Я не знаю, является ли это вашей проблемой, но ExecuteNonQuery() в середине вашего кода не нужен для запроса SELECT — Steve

Обычно указывает на идентификатор без кавычек с более чем одной точкой, который будет интерпретироваться как db.schema.table Postgres, который вызывает указанное исключение. Я бы сразу нашел причину, посмотрев на лог-файл сервера БД где фактическое заявление о нарушении задокументировано вместе с сообщением об ошибке с настройками ведения журнала по умолчанию. — Erwin Brandstetter

@ErwinBrandstetter как str_import_date = 22.08.2013 . Конкатенация строк всегда найдет способ пнуть вас — Steve

steve — тот executenonquery был ошибкой, но не проблемой erwin — я бы согласился, но оператор select работает нормально, так что я не думаю, что это. я проверю. я отредактировал свой пост, включив в него выдержку из файла журнала. я не понимаю. — JimB

хорошо, измените sql на strSQL = «SELECT * FROM product_template where «, не повезло, получая ту же ошибку. но все еще получая возвращаемые значения для переменных. — JimB

5 ответы

Если вы столкнулись с этой ошибкой в ​​DBeaver, активация целевой базы данных может решить ее:

Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.

Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен schema.table.column or schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column это будет читаться как database.schema.table и скиньте эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также приведет к ошибке).

это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.

Да, это сработало для меня. Мое ошибочное пространство имен было «postgres.public.tsola_team», теперь это «public.tsola_team». — BlueScoreMan

Это решило это для меня. Это было как лишняя точка. — RTD

У меня была такая же проблема с использованием DataGrip (версия 2020.3).

В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.

Я нашел 2 способа решить эту проблему:

  1. Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
  2. Откройте новое окно консоли

ответ дан 08 мар ’21, в 08:03

Сегодня работал над чем-то и получил это — в итоге это произошло потому, что в моем имени базы данных были заглавные буквы, а в команде — нет — prodCRT.public.tablename vs. prodcrt.public.tablename

Как только я переименовал схему в нижний регистр, все мои команды, которые работали ранее, снова заработали.

ПРИМЕЧАНИЕ: исходная база данных называлась просто «prod», поэтому все сломалось, когда я назвал ее prodCRT.

ответ дан 29 окт ’20, 13:10

Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.

При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.

Источник

Почему я получаю «ссылки между базами данных не реализованы»?

Очень простое обновление базы данных postgresql, и оно не работает. Оператор sql select в порядке и возвращает правильные значения.

Когда я добираюсь до обновления, он выдает ошибку:

Я использую vb.net и postgresql 9.2.

Все, что я хочу, это изменить поле имени, чтобы оно соответствовало описанию.

5 ответов

Если вы столкнулись с этой ошибкой в ​​DBeaver, активация целевой базы данных может решить ее:

Замечена та же ошибка с Redshift при выполнении усечения таблицы с префиксом имени схемы.

При копировании из S3 загрузка выполнялась без имени схемы. Таким образом, таблица Truncate должна иметь тот же шаблон, который использовался в команде Copy, чтобы избежать этой ошибки в Redshift.

У меня была такая же проблема с использованием DataGrip (версия 2020.3).

В моем случае это произошло из-за того, что я изменил настройки подключения, но продолжал использовать то же окно консоли.

Я нашел 2 способа решить эту проблему:

  1. Изменить сеанс консоли (щелкните правой кнопкой мыши в консоли —> переключить сеанс —> новый сеанс)
  2. Откройте новое окно консоли

Ищите ошибки в своем журнале postgresql, чтобы увидеть, что на самом деле отправляется в базу данных. Я не знаю, как исправить ваш код, потому что я не очень хорошо знаю эту платформу. Также вам необходимо перейти к параметризованным запросам, так как ваш текущий подход будет подвержен проблемам с внедрением sql.

Однако ваша ошибка означает, что у вас есть дополнительное пространство имен. Обычное пространство имен — schema.table.column или schema.table в зависимости от контекста. Если вы попытаетесь указать таблицу как schema.table.column , она прочитает это как database.schema.table и выдаст эту ошибку. Точно так же, если у вас есть лишняя точка, вы можете случайно указать database.schema.table.column (что также вызовет ошибку).

Это одна из причин, по которой строковый SQL является действительно плохой идеей, но на самом деле не касается поверхности проблемы.

Источник

очень простое обновление базы данных 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. В этом запросе внутреннего соединения, какие таблицы используют, не все таблицы присутствуют в одной базе данных. мы разделили таблицы на две базы данных, то есть базу данных приложений и базу данных безопасности.

  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

Понравилась статья? Поделить с друзьями:
  • Sql error 08003 соединение уже было закрыто dbeaver
  • Sql error 0 sqlstate 42p01
  • Sql error 0 no process is on the other end of the pipe
  • Sql developer oracle error
  • Sql developer error network adapter could not establish the connection