我只想将 Postgres 中同一数据库内的 4 个表从 schema1 复制到 schema2。并且希望将表保留在 schema1 中。知道如何在 pgadmin 以及 postgres 控制台中执行此操作吗?
您可以使用
create table ... like
create table schema2.the_table (like schema1.the_table including all);
然后将数据从源插入到目的地:
insert into schema2.the_table
select *
from schema1.the_table;
您可以使用 CREATE TABLE AS SELECT。这样就不需要插入了。将使用数据创建表格。
CREATE TABLE schema2.the_table
AS
SELECT * FROM schema1.the_table;
从 v12 开始使用的简单语法:
CREATE TABLE newSchema.newTable
AS TABLE oldSchema.oldTable;
PG转储和PG恢复通常是最有效的工具。
从命令行:
pg_dump --dbname=mydb --schema=my_schema --file=/Users/my/file.dump --format=c --username=user --host=myhost --port=5432
pg_restore --dbname=mydb --schema=my_schema --format=c --username=user --host=myhost --port=5432 /Users/my/file.dump --no-owner
这将循环遍历旧模式中的所有表,并使用新模式中的数据(无约束、索引等)重新创建它们。
-- Set the search path to the target schema
SET search_path = newSchema;
-- Loop over the table names and recreate the tables
DO $$
DECLARE
table_name text;
BEGIN
FOR table_name IN
SELECT t.table_name
FROM information_schema.tables t
WHERE t.table_schema = 'public'
AND t.table_type = 'BASE TABLE'
LOOP
EXECUTE 'CREATE TABLE ' || quote_ident(table_name) || ' AS TABLE oldSchema.' || quote_ident(table_name);
END LOOP;
END $$;
当您不需要附加到表的所有额外内容而只需要完整数据的干净副本时,这对于折叠数据仓库的多个模式特别有用。
如果您使用 PGAdmin:
CREATE
脚本,其中包括所有键和约束INSERT INTO schema2.the_table SELECT * FROM schema1.the_table;
。在这里您可能会遇到错误column "your_column" is of type XX but expression is of type YY
。在本例中,我已指定所有列:INSERT INTO schema2.the_table (fieldq, field2, ...fieldN) SELECT fieldq, field2, ...fieldN FROM schema1.the_table;