给定postgresql数据库,当使用\d+
命令时,下面的 references 表很好地列出,如您所见:
Schema | Name | Type | Owner | Size |
--------+---------------------+----------+----------+------------+---
...
public | references | table | user1 | 34 MB |
public | references_id_seq | sequence | user1 | 8192 bytes |
...
(13 rows)
但是,当我尝试对其执行SELECT操作时,例如SELECT * FROM references;
我收到语法错误:
ERROR: syntax error at or near "references"
LINE 1: SELECT * FROM references;
^
但是,以下工作:
SELECT pg_size_pretty(pg_total_relation_size('references'));
pg_size_pretty
----------------
79 MB
(1 row)
这是一种特殊的餐桌吗?为什么它无法访问?数据库中的所有其他表都是"可选"。
作为一个侧节点,为什么大小不同(`\ d +' 34 MB,pg_size_pretty为79 MB)?
答案 0 :(得分:2)
问题是REFERENCES
是一个SQL关键字,用于定义外键约束:
test=> SELECT * FROM pg_get_keywords() WHERE word ILIKE 'references';
┌────────────┬─────────┬──────────┐
│ word │ catcode │ catdesc │
├────────────┼─────────┼──────────┤
│ references │ R │ reserved │
└────────────┴─────────┴──────────┘
(1 row)
如果要将其用作标识符,则必须加倍引用它:
SELECT * FROM "references";
但最好完全避免使用这些标识符。
答案 1 :(得分:0)
使用模式名称进行前缀也很有帮助。例如:
label == last_label