使用 PostgreSQL v9.1 时,如何使用 SQL 列出所有模式?
我期待着以下内容:
SELECT something FROM pg_blah;
Run Code Online (Sandbox Code Playgroud) 我真的对术语数据库、用户和模式感到困惑。谁能解释一下它们之间的区别(如果是的话)?
如果它们相同,那么它们之间有什么相似之处?我们如何使用它们?我们如何创建它们?
我们处理来自客户的常规数据馈送,该客户刚刚将其数据库从一种看起来很熟悉的表单(每个实体一行,每个属性一列)重构为一个我似乎不熟悉的表单(每个实体每个属性一行):
之前:每个属性一列
ID Ht_cm wt_kg Age_yr ...
1 190 82 43 ...
2 170 60 22 ...
3 205 90 51 ...
Run Code Online (Sandbox Code Playgroud)
之后:所有属性的一列
ID Metric Value
1 Ht_cm 190
1 Wt_kg 82
1 Age_yr 43
1 ...
2 Ht_cm 170
2 Wt_kg 60
2 Age_yr 22
2 ...
3 Ht_cm 205
3 Wt_kg 90
3 Age_yr 51
3 ...
Run Code Online (Sandbox Code Playgroud)
这个数据库结构有名字吗?有哪些相对优势?旧方法似乎更容易对特定属性(非空、非负等)设置有效性约束,并且更容易计算平均值。但是我可以看到在不重构数据库的情况下添加新属性可能会更容易。这是构建数据的标准/首选方式吗?
如何在不停机的情况下对实时数据库进行架构更改?
例如,假设我有一个 PostgreSQL 数据库,其中包含一个包含各种用户数据(如电子邮件地址等)的表,所有这些数据都与特定用户相关联。如果我想将电子邮件地址移动到一个新的专用表,我必须更改架构,然后将电子邮件数据迁移到新表。如何在不停止写入原始表的情况下完成此操作?当然,当数据从旧表写入新表时,新数据会继续写入旧表而被遗漏,对吗?
我想这个问题经常出现,但我找不到任何标准的解决方案来处理它。
这篇文章解决了这个问题,但我并没有真正理解第3步。他说要写入两个表,然后将旧数据从第一个表迁移到新表。您如何确保只迁移旧数据?
(我在 Heroku 上使用PostgreSQL。)
我正在处理一个 amazon RDS postgresql 数据库,我知道公共模式存在一些问题(也许它被删除了)。但显然模式存在,无论如何问题没有解决。这是一个使用新创建的空数据库的示例会话:
mydb=> CREATE TABLE distributors (
mydb(> did integer,
mydb(> name varchar(40) UNIQUE
mydb(> );
ERROR: no schema has been selected to create in
mydb=> show search_path;
search_path
----------------
"$user",public
(1 row)
mydb=> create schema public;
ERROR: schema "public" already exists
Run Code Online (Sandbox Code Playgroud)
任何提示?我应该寻找什么?
解决了。 感谢 Daniel Vérité 的回答,我已经解决了以下问题:
grant usage on schema public to public;
grant create on schema public to public;
Run Code Online (Sandbox Code Playgroud)
这些是公共架构的默认权限吗?
我有一个可以访问数据库的用户,所以我认为这无论如何都不会增加安全风险......
我想我应该对template1进行相同的修改。这是正确的吗?如何检查 template1 中的权限是否正确(例如,默认值)?
使用某些方法,当您创建表的副本时,您会丢失索引、PK、FK 等。例如在 SQL Server 中,我可以说:
select * into dbo.table2 from dbo.table1;
Run Code Online (Sandbox Code Playgroud)
这只是表格的简单副本;缺少所有索引/约束。如何复制表结构(不使用备份)?
我主要希望手动执行此操作,但如果不可能,我将接受任何解决方案。
当涉及到 dbo 架构时:
我有一个名为“A”的数据库,它有两个模式“B”和“C”。
我想在不同的服务器上备份和恢复架构“B”(包括数据)。不知道如何做到这一点,因为我是 Postgres 的新手。
我是否必须在名为“A”的新服务器上创建一个新数据库,然后在其上恢复架构“B”?
请帮助执行必要的命令。
在 Ubuntu 12.04 上运行的 PostgreSQL 9.1
我是 Oracle 菜鸟,我的目的是将所有数据和元数据从一个架构传输到 Oracle 数据库中的另一个架构。我打算使用数据泵expdp和impdp命令。我对此有疑问:
expdp和impdp命令吗?这是首选方法吗?该语句是否从模式中获取所有对象(数据和元数据)并将它们移动到不同的模式中?
expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log
Run Code Online (Sandbox Code Playgroud)
那么目标模式是impdp命令后源模式的精确副本吗?
schema ×10
postgresql ×4
oracle ×2
sql-server ×2
amazon-rds ×1
backup ×1
constraint ×1
deployment ×1
eav ×1
expdp ×1
export ×1
impdp ×1
index ×1
metadata ×1
migration ×1
mysql ×1
ontology ×1
users ×1