postgresql: INSERT INTO ... (선택 * ...)
표준 SQL인지 확실하지 않습니다.
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
제가 찾고 있는 것은 tblA와 tblB가 서로 다른 DB 서버에 있다면 어떨까 하는 것입니다.
PostgreSql은 사용에 도움이 되는 유틸리티나 기능을 제공합니까?INSERT query with PGresult struct
제 말은.SELECT id, time FROM tblB ...
반환합니다.PGresult*
을 사용할 때.PQexec
이 구조를 다른 구조에서 사용할 수 있습니까?PQexec
INSERT 명령을 실행합니다.
편집:
가능하지 않다면 PQ 결과*에서 값을 추출하여 다음과 같은 다중 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');
이것으로 준비된 성명서를 만드는 것이 가능합니까!!:(
헨리크가 썼듯이 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;
편집(예, 다른):
방금 수정된 질문을 보았습니다(중복으로 닫았거나 이와 매우 유사함).
내가 이해한 것이 맞다면(postgres에는 tbla가 있고 dbtest에는 tblb가 있으며 위와 같이 local insert에는 remote select가 아닌 local select로 원격 삽입을 원하는 경우):
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 body에서 tblB를 참조할 수 없습니다.LIMIT를 사용하여 상위 20개 행을 지정하지만, 먼저 ORDER BY 절을 사용하여 정렬해야 할 것 같습니다.
지정 열에 삽입하려면 다음을 수행합니다.
INSERT INTO table (time)
(SELECT time FROM
dblink('dbname=dbtest', 'SELECT time FROM tblB') AS t(time integer)
WHERE time > 1000
);
이 표기법(여기서 처음 본 것)도 유용해 보입니다.
insert into postagem (
resumopostagem,
textopostagem,
dtliberacaopostagem,
idmediaimgpostagem,
idcatolico,
idminisermao,
idtipopostagem
) select
resumominisermao,
textominisermao,
diaminisermao,
idmediaimgminisermao,
idcatolico ,
idminisermao,
1
from
minisermao
dblink를 사용하여 다른 데이터베이스에서 확인된 보기를 만들 수 있습니다.이 데이터베이스는 다른 서버에 있을 수 있습니다.
insert into TABLENAMEA (A,B,C,D)
select A::integer,B,C,D from TABLENAMEB
Performance를 찾고 있는 경우 dblink 쿼리 내의 where 조건을 지정합니다.그렇지 않으면 외부 테이블에서 모든 데이터를 가져오고 where 조건을 적용합니다.
INSERT INTO tblA (id,time)
SELECT id, time FROM dblink('dbname=dbname port=5432 host=10.10.90.190 user=postgresuser password=pass123',
'select id, time from tblB where time>'''||1000||'''')
AS t1(id integer, time integer)
Database_Two(10.0.0.20)에서 Database_One(10.0.0.10) 데이터를 선택합니다.
10.0.0.20에 연결하고 DBLink Extension을 만듭니다.
CREATE EXTENSION dblink;
Database_에 대한 연결 테스트하나:
SELECT dblink_connect('host=10.0.0.10 user=postgres password=dummy dbname=DB_ONE');
글로벌 인증을 위한 외부 데이터 래퍼 및 서버 생성:
CREATE FOREIGN DATA WRAPPER postgres VALIDATOR postgresql_fdw_validator;
데이터베이스 간 쿼리에 이 서버 오브젝트를 사용할 수 있습니다.
CREATE SERVER dbonepostgres FOREIGN DATA WRAPPER postgres OPTIONS (hostaddr '10.0.0.10', dbname 'DB_ONE');
사용자 및 서버 매핑:
CREATE USER MAPPING FOR postgres SERVER dbonepostgres OPTIONS (user 'postgres', password 'dummy');
테스트된 dblink:
SELECT dblink_connect('dbonepostgres');
10.0.0.10에서 10.0.0.20으로 데이터 가져오기
INSERT INTO tableA
SELECT
column1,
,column2,
...
FROM dblink('dbonepostgres', 'SELECT column1, column2, ... from public.tableA')
AS data(column1 DATATYPE, column2 DATATYPE, ...)
;
를 사용하지 않는 다른 솔루션이 있습니다.
B가 원본 데이터베이스를 나타내고 A가 대상 데이터베이스를 나타낸다고 가정합니다.그리고나서,
원본 DB에서 대상 DB로 테이블 복사:
pg_dump -t <source_table> <source_db> | psql <target_db>
psql 프롬프트를 열고 target_db에 연결한 다음 단순을 사용합니다.
insert
:psql # \c <target_db>; # INSERT INTO <target_table>(id, x, y) SELECT id, x, y FROM <source_table>;
마지막으로 target_table에서 생성한 source_table의 복사본을 삭제합니다.
# DROP TABLE <source_table>;
언급URL : https://stackoverflow.com/questions/6083132/postgresql-insert-into-select
'source' 카테고리의 다른 글
Python 3.2 urllib2를 가져올 수 없음(가져오기 오류: urllib2라는 모듈이 없음) (0) | 2023.05.12 |
---|---|
일정 기간 후 자동으로 Azure Blob 삭제/만료 (0) | 2023.05.12 |
Bash를 사용하여 파일 이름 일괄 변경 (0) | 2023.05.12 |
ASP.NET_SessionId + OWIN 쿠키가 브라우저로 전송되지 않음 (0) | 2023.05.12 |
Excel: VBA로 셀이 비어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.12 |