[SQL] PostgreSQL의 : INSERT INTO ... (SELECT * ...)
SQLPostgreSQL의 : INSERT INTO ... (SELECT * ...)
나는 그것의 표준 SQL의 경우 확실하지 않다 :
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
내가 찾고 있습니다 : TBLA 및 tblB 다른 DB 서버에 무엇합니다.
합니까 PostgreSQL은 어떤 유틸리티를 제공하거나있는 PGresult 구조체와 INSERT 쿼리를 사용하는 데 도움이 될 것입니다 어떤 기능이
내가 SELECT ID, tblB FROM 시간을 의미 ... PQexec의 사용에 대한있는 PGresult *를 반환합니다. 가능 삽입 명령을 실행하기 위해 다른 PQexec의이 구조체를 사용하는 것입니다.
편집하다: 나는 * 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');
그것은이 밖으로 준비된 문을 만들 수 있습니다! :(
해결법
-
==============================
1.헨릭 쓴로서 당신은 원격 데이터베이스를 연결하고 결과를 가져 오기 위해 DBLINK 사용할 수 있습니다. 예를 들면 :
헨릭 쓴로서 당신은 원격 데이터베이스를 연결하고 결과를 가져 오기 위해 DBLINK 사용할 수 있습니다. 예를 들면 :
psql dbtest CREATE TABLE tblB (id serial, time integer); INSERT INTO tblB (time) VALUES (5000), (2000); psql postgres CREATE TABLE tblA (id serial, time integer); INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000; TABLE tblA; id | time ----+------ 1 | 5000 2 | 2000 (2 rows)
PostgreSQL는 다른 (알 수없는) 테이블에서 당신에게 쿼리 데이터를 허용 (단 함수의 인수 나 결과 유형에 대한) 레코드 의사 유형이 있습니다.
편집하다:
당신이 원하는 그것뿐만 아니라 작동하는지 당신은 준비된 문으로 그것을 만들 수 있습니다 :
PREPARE migrate_data (integer) AS INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > $1; EXECUTE migrate_data(1000); -- DEALLOCATE migrate_data;
편집 (예, 또 다른) :
난 그냥 (중복 또는이 단지와 매우 유사으로 폐쇄) 수정 된 질문을 보았다.
나의 이해가 맞으면 (포스트 그레스는 TBLA을 가지고 있으며, DBTEST는 tblb을 가지고 있으며, 당신은하지 원격 상기와 지역 인서트 선택 지역 선택 원격 삽입을 원하는) :
psql dbtest SELECT dblink_exec ( 'dbname=postgres', 'INSERT INTO tbla SELECT id, time FROM dblink ( ''dbname=dbtest'', ''SELECT id, time FROM tblb'' ) AS t(id integer, time integer) WHERE time > 1000;' );
그 중첩 된 DBLINK 싫어하지만, AFAIK 내가 dblink_exec 몸에 tblB에 참조 할 수 없습니다. 사용 LIMIT는 최고 20 행을 지정할 수 있습니다,하지만 난 당신이 그들을 먼저 ORDER BY 절을 사용하여 정렬 할 필요가 있다고 생각합니다.
-
==============================
2.당신이에 삽입하려면 열을 지정 :
당신이에 삽입하려면 열을 지정 :
INSERT INTO table (time) (SELECT time FROM dblink('dbname=dbtest', 'SELECT time FROM tblB') AS t(time integer) WHERE time > 1000 );
-
==============================
3.당신은 다른 데이터베이스에서 해결 된 뷰를 만들 DBLINK 사용할 수 있습니다. 이 데이터베이스는 다른 서버에있을 수 있습니다.
당신은 다른 데이터베이스에서 해결 된 뷰를 만들 DBLINK 사용할 수 있습니다. 이 데이터베이스는 다른 서버에있을 수 있습니다.
-
==============================
4.(여기 처음 본)이 표기법은 너무 유용 같습니다 :
(여기 처음 본)이 표기법은 너무 유용 같습니다 :
insert into postagem ( resumopostagem, textopostagem, dtliberacaopostagem, idmediaimgpostagem, idcatolico, idminisermao, idtipopostagem ) select resumominisermao, textominisermao, diaminisermao, idmediaimgminisermao, idcatolico , idminisermao, 1 from minisermao
-
==============================
5.다음은 DBLINK를 사용하지 않고 대체 솔루션입니다.
다음은 DBLINK를 사용하지 않고 대체 솔루션입니다.
가정하자 B는 소스 데이터베이스를 나타내며, A는 대상 데이터베이스를 나타냅니다 : 그때,
-
==============================
6.
insert into TABLENAMEA (A,B,C,D) select A::integer,B,C,D from TABLENAMEB
from https://stackoverflow.com/questions/6083132/postgresql-insert-into-select by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 표준 포맷 (0) | 2020.06.22 |
---|---|
[SQL] 임의의 순서로 반환 행 [중복] (0) | 2020.06.22 |
[SQL] 가입과 WHERE 쿼리를 필터링의 차이? (0) | 2020.06.22 |
[SQL] 언제 저장 프로 시저를 사용해야합니까? (0) | 2020.06.22 |
[SQL] 당신은 어떻게 대소 문자를 구별 할 MySQL의 LIKE를 강요하는 걸까? [복제] (0) | 2020.06.22 |