fab*_*vys 7 sql postgresql copy cross-database
我需要将数据从一个表复制到另一个表.这两个表具有几乎相同的结构,但是在不同的数据库中.
我试过了
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
Run Code Online (Sandbox Code Playgroud)
我尝试这个,我得到错误交叉数据库...没有实现
voy*_*ech 15
这是一项非常简单的任务.只需使用dblink就可以实现此目的:
INSERT INTO t(a, b, c)
SELECT a, b, c FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT a, b, c FROM t') AS x(a integer, b integer, c integer)
Run Code Online (Sandbox Code Playgroud)
如果您需要定期从外部数据库获取数据,那么定义服务器和用户映射是明智的.然后,您可以使用较短的语句:
dblink('yourdbname', 'your query')
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以做到这一点.如果dblink扩展不可用,则可以使用连接标准输入和输出的管道直接在命令行中复制数据:
psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin'
Run Code Online (Sandbox Code Playgroud)
但这只会在postgres 9.4或更高版本中起作用
如果您在 psql 会话中使用 postgresql 9.0 或更高版本(也可能是 8.0 或更高版本),您还可以使用:
\n\nCREATE DATABASE new_database TEMPLATE original_database;\nRun Code Online (Sandbox Code Playgroud)\n\nnew_database 将是original_database 的克隆,包括表、表模式、编码和数据。
\n\n\n\n\n\n\n主要限制是在复制源数据库时,没有其他会话可以连接到源数据库。
\n
我建议您通过从新旧数据库表中进行明智的选择来验证克隆实际上是否正确。文档还说:
\n\n\n\n然而,重要的是要理解,这还不是通用的 \xe2\x80\x9cCOPY DATABASE\xe2\x80\x9d 工具。
\n
| 归档时间: |
|
| 查看次数: |
19150 次 |
| 最近记录: |