为啥greenplum不能在不同的模式中创建相同的表名

Posted

技术标签:

【中文标题】为啥greenplum不能在不同的模式中创建相同的表名【英文标题】:why greenplum can not create same table name in different schema为什么greenplum不能在不同的模式中创建相同的表名 【发布时间】:2016-07-22 08:20:35 【问题描述】:

我想在不同模式的greenplum中创建相同的外部表,但结果是错误:关系“my_external_table_name”已经存在

click check the picture: this is before create external table

click check the picture: this is after create table

为什么我之前的表格消失了?

【问题讨论】:

请分享导致错误的语句。 我的问题更新了,你可以看到我上传的图片 【参考方案1】:

首先创建架构

 gpadmin=# create schema foo;
 gpadmin=# create schema bar;

然后在模式中创建外部表

 gpadmin=# CREATE EXTERNAL TABLE foo.fre2(
 ngram text,
 year int4,
 match_count int4,
 page_count int4,
 volume_count int4)
 LOCATION ('gpfdist://mdw:8080/dat.txt')
 FORMAT 'TEXT' (DELIMITER E'\t')
 LOG ERRORS INTO load_e_fre2 SEGMENT REJECT LIMIT 500 rows;

 gpadmin=# CREATE EXTERNAL TABLE bar.fre2(
 ngram text,
 year int4,
 match_count int4,
 page_count int4,
 volume_count int4)
 LOCATION ('gpfdist://mdw:8080/dat.txt')
 FORMAT 'TEXT' (DELIMITER E'\t')
 LOG ERRORS INTO load_e_fre2 SEGMENT REJECT LIMIT 500 rows;

您应该能够看到表存在于它们各自的命名空间中

gpadmin=# select c.relnamespace, c.relname, e.* from pg_class c join pg_exttable e on e.reloid = c.oid where c.relname = 'fre2';
 relnamespace | relname | reloid |           location           | fmttype |                fmtopts                 | command | rejectlimit | rejectlimittype | fmterrtbl | encoding | writable
--------------+---------+--------+------------------------------+---------+----------------------------------------+---------+-------------+-----------------+-----------+----------+----------
2200 | fre2    |  57474 | gpfdist://mdw:8080/dat.txt | t       | delimiter '     ' null '\N' escape '\' |         |         500 | r               |     49164 |        6 | f
57403 | fre2    |  57500 | gpfdist://mdw:8080/dat.txt | t       | delimiter '     ' null '\N' escape '\' |         |         500 | r               |     49164 |        6 | f
57404 | fre2    |  57526 | gpfdist://mdw:8080/dat.txt | t       | delimiter '     ' null '\N' escape '\' |         |         500 | r               |     49164 |        6 | f
(3 rows)


gpadmin=# select nspname from pg_namespace where oid in (2200, 57403, 57404);
 nspname
---------
 public
 foo
 bar
(3 rows)

【讨论】:

它对我不起作用,我以前的表消失了..在我的情况下不能存在具有相同表名的不同架构...我已经更新了我的问题,你可以检查一下更多详情【参考方案2】:

根据前缀“通知”,以下消息不是错误,它只是通知用户在 CREATE 语句中定义的错误表不存在,因此它正在为您创建该表。

Notice: Error table "request_histories_external_error" does not exist. Autogenerating and error table with the same name

【讨论】:

以上是关于为啥greenplum不能在不同的模式中创建相同的表名的主要内容,如果未能解决你的问题,请参考以下文章

为啥你不能命名一个在函数中创建的对象,与它在 Python 中的类名完全相同?

为啥我不能在我的 H2 数据库中创建表?

在 Greenplum 中创建表结构

Greenplum 实时数据仓库实践——实时数据装载

Greenplum 实时数据仓库实践——实时数据装载

Greenplum 实时数据仓库实践——实时数据装载