标签: dblink

postgresql:INSERT INTO ...(SELECT*...)

我不确定它的标准SQL是否:

 INSERT INTO tblA 
 (SELECT id, time 
    FROM tblB 
   WHERE time > 1000)  
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是:如果tblA和tblB在不同的DB服务器中,该怎么办

PostgreSql是否提供任何实用程序或具有任何有助于使用的功能 INSERT query with PGresult struct

我的意思是SELECT id, time FROM tblB ...将返回PGresult*使用PQexec.是否可以在另一个结构中使用此结构PQexec来执行INSERT命令.

编辑:
如果不可能,那么我将从PQresult*中提取值并创建多个INSERT语句语法,如:

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy'); 
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个准备好的声明!:(

sql postgresql dblink insert

106
推荐指数
6
解决办法
35万
查看次数

如何在PostgreSQL中进行大型非阻塞更新?

我想在PostgreSQL中对表进行大量更新,但我不需要在整个操作中维护事务完整性,因为我知道我正在更改的列不会被写入或读取更新.我想知道psql控制台中是否有一种简单的方法可以更快地完成这些类型的操作.

例如,假设我有一个名为"orders"的表,有3500万行,我想这样做:

UPDATE orders SET status = null;
Run Code Online (Sandbox Code Playgroud)

为避免被转移到offtopic讨论,让我们假设3500万列的所有状态值当前都设置为相同(非空)值,从而使索引无用.

此语句的问题是需要很长时间才能生效(仅因为锁定),并且所有更改的行都将被锁定,直到整个更新完成.此更新可能需要5个小时,而类似

UPDATE orders SET status = null WHERE (order_id > 0 and order_id < 1000000);
Run Code Online (Sandbox Code Playgroud)

可能需要1分钟.超过3500万行,执行上述操作并将其分成35块只需要35分钟,节省了4小时25分钟.

我可以用脚本进一步分解它(在这里使用伪代码):

for (i = 0 to 3500) {
  db_operation ("UPDATE orders SET status = null
                 WHERE (order_id >" + (i*1000)"
             + " AND order_id <" + ((i+1)*1000) " +  ")");
}
Run Code Online (Sandbox Code Playgroud)

此操作可能仅在几分钟内完成,而不是35分钟.

所以这归结为我真正的要求.我不想写一个怪异的脚本来分解操作,每次我想做这样一个大的一次性更新.有没有办法在SQL中完成我想要的东西?

postgresql dblink transactions plpgsql sql-update

61
推荐指数
3
解决办法
3万
查看次数

如何在PostgreSQL中使用(安装)dblink?

我已经习惯了Oracle并在我的架构中创建了一个dblink,然后访问了这样一个远程数据库:mytable@myremotedb那么对于PostgreSQL有没有相同的做法?

现在我正在使用这样的dblink:

SELECT logindate FROM dblink('host=dev.toto.com
                              user=toto
                              password=isok
                              dbname=totofamily', 'SELECT logindate FROM loginlog');
Run Code Online (Sandbox Code Playgroud)

当我执行此命令时,我收到以下错误:

提示:没有函数匹配给定的名称和参数类型.您可能需要添加显式类型转换.

有人有想法吗?我们是否必须"激活"dblinks或在使用它们之前做些什么?

我们要查询的远程数据库有什么问题吗?我们还要激活dblink吗?我一直都有could not establish connection.这是行类型:

SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432');
Run Code Online (Sandbox Code Playgroud)

IP地址正确,Postgres正在远程服务器上运行.任何的想法?

sql postgresql dblink

56
推荐指数
4
解决办法
13万
查看次数

Postgres错误:用作表达式的子查询返回多行

我有两个独立的数据库.我试图将一个数据库中的列更新为另一个数据库中的列的值:

UPDATE customer
SET customer_id=
   (SELECT t1 FROM dblink('port=5432, dbname=SERVER1 user=postgres password=309245',
   'SELECT store_key FROM store') AS (t1 integer));
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

ERROR:  more than one row returned by a subquery used as an expression
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sql database postgresql dblink subquery

30
推荐指数
3
解决办法
9万
查看次数

如何在两个oracle实例之间创建数据库链接

如何在Oracle实例之间创建数据库链接,假设A和B是两个实例.我想从实例A访问实例B中的数据.

oracle dblink

20
推荐指数
3
解决办法
13万
查看次数

PostgreSQL:Query没有结果数据的目的地

我试图通过使用dblink through函数从远程数据库获取数据,但收到错误"查询没有结果数据的目标".我使用plpgsql语言做同样的事情.

功能:

CREATE OR REPLACE FUNCTION fun()
  RETURNS text AS
$$
begin
select dblink_connect(
      'port=5432 dbname=test user=postgres password=****');

WITH a AS (
SELECT *
FROM dblink(
    'SELECT slno,fname,mname,lname
    FROM    remote_tbl'
     ) AS t (slno int, fname text, mname text, lname text)
)
, b AS (
INSERT INTO temptab1
SELECT slno, name
FROM   a
)
, c AS (
INSERT INTO temptab2
SELECT slno, name
FROM   a
)
INSERT INTO temptab3
SELECT slno, name
FROM   a;


select dblink_disconnect(); …
Run Code Online (Sandbox Code Playgroud)

postgresql dblink common-table-expression

18
推荐指数
3
解决办法
5万
查看次数

安装DBLink for Postgres 9

有人可以说明如何安装Postgres 9(Centos)的要求,以便能够使用dblink进行inter-postgres db查询.

似乎没有关于如何安装dblink需求的干净文档.

提前致谢.

sql linux postgresql dblink

16
推荐指数
2
解决办法
3万
查看次数

处理Oracle分布式数据库中LOB的最佳方法

如果创建Oracle dblink,则无法直接访问目标表中的LOB列.

例如,您使用以下命令创建dblink:

create database link TEST_LINK 
  connect to TARGETUSER IDENTIFIED BY password using 'DATABASESID';
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以执行以下操作:

select column_a, column_b 
from data_user.sample_table@TEST_LINK
Run Code Online (Sandbox Code Playgroud)

除非列是LOB,否则会出现错误:

ORA-22992: cannot use LOB locators selected from remote tables
Run Code Online (Sandbox Code Playgroud)

这是一个记录在案的限制.

同一页面建议您将值提取到本地表中,但这有点麻烦:

CREATE TABLE tmp_hello 
AS SELECT column_a 
from data_user.sample_table@TEST_LINK
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

sql oracle dblink distributed-transactions

14
推荐指数
2
解决办法
4万
查看次数

如何使用位于不同模式的DBLINK在Oracle中进行选择?

我们有一个Oracle DBMS(11g)和以下配置:

  • 数据库用户"MYUSER"
  • 两个模式"MYUSER"和"SCHEMA_B"
  • 用户"MYUSER"可以访问"SCHEMA_B"并对其表具有READ权限
  • 位于"SCHEMA_B"中的公共数据库链接"DB_LINK"
  • 直接使用DB用户"SCHEMA_B"时,DB_LINK正在工作

问题:以"MYUSER"身份登录时,使用"SCHEMA_B"的DB链接访问表的正确语法是什么?是否有可能这样做?

我已经尝试了几个星座,这些都不起作用:

select * from dual@"DB_LINK"
select * from dual@"SCHEMA_B"."DB_LINK"
select * from dual@SCHEMA_B."DB_LINK"
select * from dual@SCHEMA_B.DB_LINK
select * from SCHEMA_B.dual@DB_LINK
select * from "SCHEMA_B".dual@DB_LINK
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息是:ORA-02019.00000 - "找不到远程数据库的连接描述"

谢谢你的任何建议!

database oracle dblink database-schema

12
推荐指数
1
解决办法
20万
查看次数

Oracle:在存储过程中使用数据库链接:表或视图不存在

我目前有一个问题,我不能在存储过程中引用链接数据库中的表.我收到错误消息:

ORA-00942:表或视图不存在

以下是我在主机(运行oracle 10g)上设置数据库链接到远程数据库(运行oracle 11g)的步骤.这些步骤是准确的,但有些名称已被更改,但它们保持一致.

  1. 更新tnsnames.ora,添加一个新条目:

    REMOTE_DB =
        (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)
                       (HOST = 10.10.10.10)
                       (QUEUESIZE = 20)
                       (PORT = 1521)
            )
            (CONNECT_DATA =
                       (SERVICE_NAME = remote_service)
            )
        )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建数据库链接,作为稍后将创建和执行存储过程的用户:

    create database link remote_link
    connect to "remote_user"
    identified by "remote_pass"
    using 'REMOTE_DB';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过选择证明数据库链接正在工作:

    select id from remote_table@remote_link;
    
    id
    --------------------------------------------------------------------------------
    8ac6eb9b-fcc1-4574-8604-c9fd4412b917
    c9e7ee51-2314-4002-a684-7817b181267b
    cc395a81-56dd-4d68-9bba-fa926dad4fc7
    d6b450e0-3f36-411a-ba14-2acc18b9c008
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建依赖于工作数据库链接的存储过程:

    create or replace
    PROCEDURE test_remote_db_link
    AS
    v_id varchar(50);
    BEGIN   
        select id into v_id from remote_table@remote_link where id = 'c9e7ee51-2314-4002-a684-7817b181267b';
        dbms_output.put_line('v_id : ' || …
    Run Code Online (Sandbox Code Playgroud)

sql database oracle stored-procedures dblink

11
推荐指数
1
解决办法
4万
查看次数