我不确定它的标准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)
是否有可能创建一个准备好的声明!:(
我想在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中完成我想要的东西?
我已经习惯了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正在远程服务器上运行.任何的想法?
我有两个独立的数据库.我试图将一个数据库中的列更新为另一个数据库中的列的值:
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)
这是我收到的错误:
Run Code Online (Sandbox Code Playgroud)ERROR: more than one row returned by a subquery used as an expression
有任何想法吗?
如何在Oracle实例之间创建数据库链接,假设A和B是两个实例.我想从实例A访问实例B中的数据.
我试图通过使用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) 有人可以说明如何安装Postgres 9(Centos)的要求,以便能够使用dblink进行inter-postgres db查询.
似乎没有关于如何安装dblink需求的干净文档.
提前致谢.
如果创建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)
还有其他想法吗?
我们有一个Oracle DBMS(11g)和以下配置:
问题:以"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 - "找不到远程数据库的连接描述"
谢谢你的任何建议!
我目前有一个问题,我不能在存储过程中引用链接数据库中的表.我收到错误消息:
ORA-00942:表或视图不存在
以下是我在主机(运行oracle 10g)上设置数据库链接到远程数据库(运行oracle 11g)的步骤.这些步骤是准确的,但有些名称已被更改,但它们保持一致.
更新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)创建数据库链接,作为稍后将创建和执行存储过程的用户:
create database link remote_link
connect to "remote_user"
identified by "remote_pass"
using 'REMOTE_DB';
Run Code Online (Sandbox Code Playgroud)通过选择证明数据库链接正在工作:
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)创建依赖于工作数据库链接的存储过程:
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)dblink ×10
postgresql ×6
sql ×6
oracle ×4
database ×3
insert ×1
linux ×1
plpgsql ×1
sql-update ×1
subquery ×1
transactions ×1