PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

postgresql:CHÈN VÀO ... (CHỌN * ...)

Như Henrik đã viết, bạn có thể sử dụng dblink để kết nối cơ sở dữ liệu từ xa và tìm nạp kết quả. Ví dụ:

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 có kiểu giả bản ghi (chỉ dành cho đối số của hàm hoặc kiểu kết quả), cho phép bạn truy vấn dữ liệu từ một bảng (không xác định) khác.

Chỉnh sửa:

Bạn có thể làm cho nó như một tuyên bố chuẩn bị sẵn nếu bạn muốn và nó hoạt động tốt:

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;

Chỉnh sửa (vâng, khác):

Tôi vừa thấy câu hỏi đã sửa đổi của bạn (bị đóng là trùng lặp hoặc rất giống với câu hỏi này).

Nếu sự hiểu biết của tôi là đúng (postgres có tbla và dbtest có tblb và bạn muốn chèn từ xa với lựa chọn cục bộ , không phải chọn từ xa với chèn cục bộ như trên):

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;'
);

Tôi không thích dblink lồng nhau đó, nhưng AFAIK, tôi không thể tham chiếu đến tblB trong phần thân dblink_exec. Sử dụng LIMIT để chỉ định 20 hàng trên cùng, nhưng tôi nghĩ trước tiên bạn cần sắp xếp chúng bằng mệnh đề ORDER BY.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng dưới dạng đối số của một hàm PostgreSQL

  2. Chuyển từ DB2 sang PostgreSQL - Điều bạn nên biết

  3. postgresql - sql - số giá trị `true`

  4. Làm cách nào để bỏ tất cả các bảng trong cơ sở dữ liệu PostgreSQL?

  5. Cách clock_timestamp () hoạt động trong PostgreSQL