Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从pg_转储中删除表空间_Postgresql_Sed_Sh - Fatal编程技术网

Postgresql 从pg_转储中删除表空间

Postgresql 从pg_转储中删除表空间,postgresql,sed,sh,Postgresql,Sed,Sh,我试图编写一个脚本,从只接受到本地机器的ssh连接的远程机器导入数据库模式 除了在远程数据库中保持相同的编码外,我什么都做了 我发现解决方案是使用pg_dump和-C create,这样我就可以用相同的编码创建数据库,但我遇到了一个问题。。。远程数据库中有一个表空间,我不想导入它 我知道psql的最新版本已经有了无表空间参数。。。但不幸的是,我不能升级postgres版本 有人能告诉我一种删除sql转储上所有表空间的方法吗?像塞德什么的 非常感谢 我曾经通过sed管道pg_dump在安装之间切换

我试图编写一个脚本,从只接受到本地机器的ssh连接的远程机器导入数据库模式

除了在远程数据库中保持相同的编码外,我什么都做了

我发现解决方案是使用pg_dump和-C create,这样我就可以用相同的编码创建数据库,但我遇到了一个问题。。。远程数据库中有一个表空间,我不想导入它

我知道psql的最新版本已经有了无表空间参数。。。但不幸的是,我不能升级postgres版本

有人能告诉我一种删除sql转储上所有表空间的方法吗?像塞德什么的


非常感谢

我曾经通过sed管道pg_dump在安装之间切换表空间,我在sed中修改了TABLESPACE子句

您还可以删除它,并另外删除创建表空间。。。您可以使用任何编辑器从转储文件将其加载到另一个DB集群

我早就开始使用新版本了,在那里我可以使用这个选项。根据您的设置,在Linux中,shell命令可能看起来像这样-从我的头脑中看,只是粗略地测试过:

pgdump-h 123.456.7.89-p 5432 mydb\ |塞德\ -e'/^创建表空间/d'\ -e's/*表空间。*;/;/'\ -e s/SET default_表空间=*/设置默认的_表空间=/ |psql-p5432 mylocaldb -e“/^CREATE TABLESPACE/d”。。。删除以CREATE TABLESPACE开头的行

-e的/*表空间。*;/;/'。。。在CREATE TABLE或CREATE INDEX语句的pg_dump输出中,修剪tablespace子句始终位于行的末尾

-e s/SET default_表空间=*/设置默认的_表空间=。。删除除空字符串之外的任何其他默认表空间,空字符串表示当前数据库的默认表空间。注意双引号的使用,这样我就可以很容易地输入单引号了

如果知道所涉及的表空间的名称,可以缩小范围。从理论上讲,数据行可能会像搜索词一样开始。不过,我自己从来没有遇到过问题


查看sed的更多信息。

我曾经通过管道pg_dump通过sed在安装之间切换表空间,在这里我修改了TABLESPACE子句

您还可以删除它,并另外删除创建表空间。。。您可以使用任何编辑器从转储文件将其加载到另一个DB集群

我早就开始使用新版本了,在那里我可以使用这个选项。根据您的设置,在Linux中,shell命令可能看起来像这样-从我的头脑中看,只是粗略地测试过:

pgdump-h 123.456.7.89-p 5432 mydb\ |塞德\ -e'/^创建表空间/d'\ -e's/*表空间。*;/;/'\ -e s/SET default_表空间=*/设置默认的_表空间=/ |psql-p5432 mylocaldb -e“/^CREATE TABLESPACE/d”。。。删除以CREATE TABLESPACE开头的行

-e的/*表空间。*;/;/'。。。在CREATE TABLE或CREATE INDEX语句的pg_dump输出中,修剪tablespace子句始终位于行的末尾

-e s/SET default_表空间=*/设置默认的_表空间=。。删除除空字符串之外的任何其他默认表空间,空字符串表示当前数据库的默认表空间。注意双引号的使用,这样我就可以很容易地输入单引号了

如果知道所涉及的表空间的名称,可以缩小范围。从理论上讲,数据行可能会像搜索词一样开始。不过,我自己从来没有遇到过问题


查看有关sed的更多信息。

是的,问题是我需要在脚本中包含它,这样sed命令删除表空间将是最好的解决方案。。。虽然我不完全理解sed,但我不知道sed命令应该如何删除它,我自己就知道了,他使用sed s/TABLESPACE/-表空间之类的that@Killercode:也应该可以工作-除了创建表空间和设置默认的_表空间(如果它们应该存在的话)。是的,问题是我需要在脚本中包含它们,所以sed命令删除表空间将是最好的解决方案。。。虽然我不完全理解sed,但我不知道sed命令应该如何删除它,我自己就知道了,他使用sed s/TABLESPACE/-表空间之类的that@Killercode:也应该工作-除了创建表空间和设置默认的_表空间(如果有)。