|
|
|
dblink connection error
|
|||
|---|---|---|---|
|
#18+
Есть вот такая процедура, копирующая данные из новой базы в старую. CREATE OR REPLACE FUNCTION onregioninsert() RETURNS trigger AS $BODY$ DECLARE oldid integer = 0; connid boolean; BEGIN connid := (SELECT (public.dblink_get_connections())[1]) ISNULL; IF (connid) ISNULL THEN PERFORM public.dblink_connect('new2old','dbname=olddb port=5432 host=127.0.0.1 user=username password=password'); END IF; PERFORM public.dblink_exec('new2old','ALTER TABLE area DISABLE TRIGGER areainsert'); SELECT oldid FROM public.dblink('new2old','INSERT INTO "area" ("name") VALUES($$' || NEW.name ||'$$) RETURNING rowid') AS t1(rowid integer) INTO oldid; UPDATE "Region" SET "oldRowid" = oldid WHERE "idRegion" = NEW."idRegion"; PERFORM public.dblink_exec('new2old','ALTER TABLE area ENABLE TRIGGER areainsert'); PERFORM dblink_disconnect('new2old'); RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; при попытке добавления записи в таблице Region в новой базе вылезает: Ошибка: ERROR: could not establish connection DETAIL: missing "=" after "new2old" in connection info string CONTEXT: SQL statement "SELECT public.dblink_exec('new2old','ALTER TABLE area DISABLE TRIGGER areainsert')" Почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 11:55 |
|
||
|
dblink connection error
|
|||
|---|---|---|---|
|
#18+
djpeter, потому что у вас неверно проверяется отсутствие соединения дблинка с именем 'new2old' в списке соединений сеанса. // у вас проверяется отсутствие каких--либо соединений, что неверно) как правильно -- см доку. (что то про 'new2old' = ANY(dblink_get_connections() ) в итоге -- какое то соединение у вас открыто, но с другим именем, или безымянное. поэтому вы не попадаете на ветку с открытием именнованного соединения (массив соединений не пуст) в итоге, dblink пытается трактовать 'new2old' как строку соединения, которая формально парсится как param=value. и именно вот этого = парсер и не находит. как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 13:19 |
|
||
|
dblink connection error
|
|||
|---|---|---|---|
|
#18+
Я переписал вот так connid boolean = false; BEGIN connid := (SELECT 'new2old' = ANY (public.dblink_get_connections())); IF NOT connid THEN SELECT public.dblink_connect('new2old','dbname=щвви port=5432 host=127.0.0.1 user=user password=password'); END IF; Результат тот же. Если выполнять команды по отдельности из консоли, т.е. подключиться, выполнить запрос, то все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:37 |
|
||
|
dblink connection error
|
|||
|---|---|---|---|
|
#18+
Заработало, убрал селект, там же перформ нужен на запуск соединения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38969728&tid=1997972]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
207ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 574ms |

| 0 / 0 |
