我一定在设置 PostgreSQL 方面遗漏了一些东西。我想做的是创建多个相互隔离的数据库和用户,以便特定用户只能访问我指定的数据库。但是,据我所知,任何创建的用户都可以访问所有数据库,而无需获得任何特定授权。
这是我在 Ubuntu Server 12.04 上所做的:
似乎新用户“mike1”连接到数据库“data1”并创建表等没有问题。这根本没有运行任何 GRANT 命令(“data1”的所有者是“postgres”,因为我没有指定所有者在第 3 步)。这真的是它应该如何工作吗?
我想要做的是授予 mike1 对 data1 的完全访问权限,然后对更多用户和数据库重复此操作,确保用户只能访问我选择的一个(或可能几个)数据库。
根据PostgreSQL 的文档,VARCHAR,VARCHAR(n)和之间没有性能差异TEXT。
我应该为名称或地址列添加任意长度限制吗?
编辑:不是欺骗:
我知道这种CHAR类型是过去的遗物,我不仅对性能感兴趣,而且对其他优缺点感兴趣,例如 Erwin 在他惊人的回答中所述。
关于两者之间的差异,有一个很长且相当清晰的答案
TIMESTAMP WITH TIME ZONE
-vs-TIMESTAMP WITHOUT TIME ZONE在 SO post Ignoring time zone together in Rails and PostgreSQL 中可用。
我想知道的是:实际使用是否有任何有效的用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式?
如何在不停机的情况下对实时数据库进行架构更改?
例如,假设我有一个 PostgreSQL 数据库,其中包含一个包含各种用户数据(如电子邮件地址等)的表,所有这些数据都与特定用户相关联。如果我想将电子邮件地址移动到一个新的专用表,我必须更改架构,然后将电子邮件数据迁移到新表。如何在不停止写入原始表的情况下完成此操作?当然,当数据从旧表写入新表时,新数据会继续写入旧表而被遗漏,对吗?
我想这个问题经常出现,但我找不到任何标准的解决方案来处理它。
这篇文章解决了这个问题,但我并没有真正理解第3步。他说要写入两个表,然后将旧数据从第一个表迁移到新表。您如何确保只迁移旧数据?
(我在 Heroku 上使用PostgreSQL。)
我找到了一百万个关于如何设置 Autovacuum 配置设置的示例,但似乎无法找到如何列出当前配置。
Postgres 9.1 是我最感兴趣的版本。
我正在学习 PostgreSQL 并试图弄清楚如何创建一个临时表或一个WITH可以用来代替常规表的声明,以用于调试目的。
我查看了CREATE TABLE的文档,它说VALUES可以用作查询,但没有给出示例;VALUES其中链接的条款的文档也没有示例?
所以,我写了一个简单的测试如下:
DROP TABLE IF EXISTS lookup;
CREATE TEMP TABLE lookup (
key integer,
val numeric
) AS
VALUES (0,-99999), (1,100);
Run Code Online (Sandbox Code Playgroud)
但是 PostgreSQL (9.3) 抱怨
“AS”处或附近的语法错误
我的问题是:
我怎样才能修正上面的说法?
我如何调整它以用于WITH block?
提前致谢。
有没有办法将 postgres 表数据作为 json 导出到文件?我需要逐行输出,例如:
{'id':1,'name':'David'}
{'id':2,'name':'James'}
...
Run Code Online (Sandbox Code Playgroud)
编辑:postgres 版本:9.3.4
我希望我能得到一个明确的答案,说明如何确保像使用 MS SQL Server 一样进行完整的 Postgres 备份,然后照顾孤立的用户。
从我读过的内容来看,这可能是错误的,找到一个好的 PostgreSQL 博客一直很有挑战性,所以请随时向我推荐一些,我需要弄清楚这个应用程序是如何工作的,这样我才能信任我的备份和 Slony复制。我让一位开发人员在选择s 时通过custom,directory和tarformat恢复了我从 PgadminIII 获取的备份,OID但他说其中两个没有加载,tar但它只是目录,而不是数据。我现在真的很困惑。
pg_dump和pg_dumpall选项。我想回到一切了,我需要测试恢复这个数据库的地方,并确认是的,我们需要的所有数据和我们的备份是好的。最终我想写一个自动恢复脚本,但一天一次。pg_dumpall显然有一个-globals应该备份所有内容的选项,但帮助pg_dumpall显示了一个-g, --globals-only dump only global objects, no databases,而不是一个--globals选项。
我认为pg_dumpall至少会备份外键,但即使这样似乎也是一个“选项”。根据文档,即使pg_dumpall我需要使用一个-o选项来备份外键,我也无法想象什么时候我不想备份外键,而这作为默认选项更有意义。
我有一个 PostgreSQL 服务器,但我仍然无法理解为什么该应用程序OID默认情况下不会备份s!似乎 99.9% 的情况下您都希望如此。
更新1:
Postgres文档提到globals我正在寻找的选项似乎是此版本的默认选项,但它仍然需要该-o选项。如果有人可以验证或给我一个示例命令来恢复其他地方的单个数据库及其所需的一切,我将不胜感激。
编辑:被网站要求通过编辑我的问题来显示这个问题的独特性。这个问题提出了这个问题,并明确了备份中的 OID、全局和非全局之间的区别,以及测试恢复建议以确保备份是好的,而不是仅仅备份。由于这些答案,我能够备份、找出全局变量/oids,并使用 cron 作业在 …
如何在 PostgreSQL 中使用 SQL 命令列出数据库的所有视图?
我想要类似于 psql\dv命令的输出的东西,但最好只是一个视图名称列表。例如,
SELECT ...;
my_view_1
my_view_2
my_view_3
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu Linux 上运行 PostgreSQL v9.1.4。
在 PostreSQL 8.3 中,我试图创建一个视图,它看起来就像一个现有的表,但具有不同的列名。
这有效
CREATE OR REPLACE VIEW gfam.nice_builds AS
SELECT (family_tree.family_tree_id) as x,
family_tree.family_tree_name, family_tree.family_tree_description
FROM gfam.family_tree;
Run Code Online (Sandbox Code Playgroud)
以上复制了 family_tree 表,但以下尝试失败:
CREATE OR REPLACE VIEW gfam.nice_builds AS
SELECT (family_tree.family_tree_id) as x,
family_tree.family_tree_name, family_tree.family_tree_description
FROM gfam.family_tree;
Run Code Online (Sandbox Code Playgroud)
如何重命名列?
postgresql ×10
backup ×1
datatypes ×1
deployment ×1
dump ×1
export ×1
json ×1
migration ×1
performance ×1
permissions ×1
pg-dump ×1
schema ×1
syntax ×1
timestamp ×1
vacuum ×1
varchar ×1
view ×1