标签: psql

在 psql 错误消息中获取 SQLSTATE

我有以下问题。

SELECT * FROM tgvbn();
ERROR:  function tgvbn() does not exist
LINE 1: SELECT * FROM tgvbn();
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

由于官方文档的附录 A只说明了 error_codes 和条件名称,而没有说明实际的消息,因此只能猜测“没有函数匹配...”指的是42883 / undefined_function. 我可以设置log_error_verbosity = verbosepostgresql.conf-但会影响日志,不返回到客户端中的消息:

控制在服务器日志中为记录的每条消息写入的详细信息量。

好吧,我可以查阅日志以获取这条信息,但是有没有办法将其包含在错误消息中?

postgresql client psql errors

9
推荐指数
1
解决办法
3037
查看次数

如何连接 psql 变量?

如何连接两个 psql(PostgreSQL 客户端)变量?我想通过连接目录路径变量和文件名变量来生成绝对路径。

我试过这个:

\set path '/tmp/'
\set file 'foo'
\echo :path:file
Run Code Online (Sandbox Code Playgroud)

但是 psql 在路径和文件之间放置了一个空格,并输出:

/tmp/ foo
Run Code Online (Sandbox Code Playgroud)

postgresql psql

8
推荐指数
1
解决办法
8398
查看次数

在 psql 中退出 \e 编辑器后如何防止查询执行?

是否有选项可以更改 psql \e 开关的“退出外部编辑器 -> 查询自动运行”行为?(除了故意修改查询语法)。

postgresql psql

8
推荐指数
1
解决办法
1843
查看次数

是否有可以执行包含多个 sql 文件的主文件的 Postgres 管理 GUI

我正在开发一个很长的脚本。我想将脚本分解为更小、更易于管理的脚本,并将每个 sql 文件包含在一个主文件中,然后执行主文件。

例子: master.sql

内容(我不知道要使用的语法):

file1.sql
file2.sql
file3.sql
Run Code Online (Sandbox Code Playgroud)

我找到了几个关于psql -f在命令行中使用并\i包含这些文件的教程,但这里的首选项是避免使用终端并使用 GUI 来管理我的数据库并执行master.sql脚本。

这在任何 postgres 管理 GUI 中都可能吗?大概它不在pgAdmin 中。

postgresql psql

8
推荐指数
1
解决办法
3948
查看次数

使用 psql 仅显示表名

如何使用 psql 从指定的 Postgres 数据库中获取没有页眉或页脚或其他任何内容的表名?也就是说,如果我有名为“table1”和“table2”的表,那么输出将是:

table1
table2
Run Code Online (Sandbox Code Playgroud)

仅此而已。我一直在尝试各种组合,但看起来它应该比我制作的要容易得多。

postgresql psql information-schema

8
推荐指数
1
解决办法
3万
查看次数

Postgres 权限:psql \dp - 加号是什么

我使用 psql-command "\dp" 来找出给定的授权。

测试服务器上的版本:armv7l-unknown-linux-gnueabi 上的 PostgreSQL 9.1.15,由 gcc (Debian 4.6.3-14) 4.6.3 编译,32 位

在 postgres 手册之外:

rolename=xxxx -- privileges granted to a role
    =xxxx -- privileges granted to PUBLIC

        r -- SELECT ("read")
        w -- UPDATE ("write")
        a -- INSERT ("append")
        d -- DELETE
        D -- TRUNCATE
        x -- REFERENCES
        t -- TRIGGER
        X -- EXECUTE
        U -- USAGE
        C -- CREATE
        c -- CONNECT
        T -- TEMPORARY
  arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
        * …
Run Code Online (Sandbox Code Playgroud)

postgresql psql debian

8
推荐指数
1
解决办法
4915
查看次数

使用 COPY FROM 时 psql 拒绝访问文件

当我这样做时:

COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
Run Code Online (Sandbox Code Playgroud)

关于这一点:

-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
Run Code Online (Sandbox Code Playgroud)

psql 告诉我这个:

ERROR:  could not open file "/my/file.csv" for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)

我怎样才能读取我的文件?谢谢!

- - 更新

看起来apparmor在 Ubuntu 中默认安装了一个叫做的东西。
似乎与评论中提到的 SELinux 具有相同的功能。

- - 更新

删除后apparmor,我仍然遇到同样的问题。 selinux未安装。

关于下面关于访问的评论,COPY FROM 正在从超级用户帐户运行(如果没有,它会给出不同的错误消息)和上面复制的文件权限,我理解为“每个人都可读”。

- - 更新

我试图访问postgres用户下的文件。它卡在树的特定位置

drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm

postgres@dexter:/home/peter/PyPacks$ cd phm

bash: cd: phm: Permission denied

我想我会把文件放在其他地方,但这很奇怪!

postgresql psql csv

7
推荐指数
2
解决办法
5万
查看次数

无法撤销 postgresql 用户的默认权限

我正在使用 psql 工具:

命令:

my_db=# \ddp
Run Code Online (Sandbox Code Playgroud)

结果:

                         Default access privileges
     Owner      | Schema |   Type   |          Access privileges
----------------+--------+----------+--------------------------------------
 postgres       | kpi    | function | kpi_updater=X/postgres              +
                |        |          | intranet2=X/postgres
 postgres       | kpi    | sequence | kpi_updater=rwU/postgres            +
                |        |          | intranet2=rwU/postgres
 postgres       | kpi    | table    | kpi_updater=arwdDxt/postgres        +
                |        |          | intranet2=arwdDxt/postgres
 postgres       | kpi    | type     | kpi_updater=U/postgres              +
                |        |          | intranet2=U/postgres
Run Code Online (Sandbox Code Playgroud)

接下来,我使用以下命令,返回没有错误:

ALTER DEFAULT PRIVILEGES IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2; …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions psql

7
推荐指数
1
解决办法
7789
查看次数

psql \e 的鲁莽行为

psql 13.2 退出编辑器时,无论退出编辑器后如何,都会执行查询缓冲区 - 在这种情况下,缓冲区现在可能保存最近执行的 SQL 查询。

重现:

  1. vim使用\e\e filenamepsql控制台启动编辑器(在我的情况下)。
  2. 输入与否,没有区别。
  3. 取消编辑:q(或:q!强制)

预期行为:回到启动编辑器之前的状态。(我取消了编辑!)
观察到的行为:重新执行上次执行的 SQL 查询。

似乎发生了什么\e

  1. 它执行(相当于)\p,因此当前查询缓冲区包含前一个命令,当它为空时。(编辑文件时用户看不到!) 手册\p

    \p 或者 \print

    将当前查询缓冲区打印到标准输出。如果当前查询缓冲区为空,则打印最近执行的查询。

  2. 启动编辑器。如果提供了文件名,则加载文件,否则加载查询缓冲区。

  3. 如果编辑器以写入结束,则将结果复制到查询缓冲区。
    如果编辑被取消(:q在 vim 中),不要覆盖查询缓冲区。(它现在保存了之前的命令!)

  4. 执行查询缓冲区。或者,准确地说,这样做:

行为似乎可以\p(只是复制查询缓冲区,没有造成任何伤害),但不能\e执行,它可以执行我什至没有看到的命令。

这是一个错误吗?
无论哪种方式,我至少想在离开编辑器时禁用自动执行。但这似乎不可能。或者我错过了什么?

postgresql psql

7
推荐指数
1
解决办法
187
查看次数

如何从 bash shell (PostgreSQL) 将环境变量传递到 sql 文件

我需要能够从.sql使用 .bashrc 执行文件的 bash shell 传递环境变量psql

psql我正在运行的命令是:

su postgres -c "psql -v ON_ERROR_STOP=1 -v dbname=example -v dbuser=example -e" < ./create-db.sql
Run Code Online (Sandbox Code Playgroud)

我放置的位置example通常分别设置为$DATABASE_NAMEDATABASE_USER,在执行命令之前在 bash 脚本中设置psql

create-db.sql文件是:

\connect postgres
DROP DATABASE IF EXISTS :dbname;
DO $$BEGIN
    CREATE USER :dbuser;
EXCEPTION WHEN duplicate_object THEN
    RAISE NOTICE 'user already exists';
END$$;
ALTER ROLE :"dbuser" SET search_path TO :"dbname",public;
CREATE DATABASE :"dbname"
    OWNER=:dbuser
    ENCODING=UTF8
    LC_COLLATE='en_US.UTF-8'
    LC_CTYPE='en_US.UTF-8'
    TEMPLATE=template0;
\connect :"dbname"
CREATE SCHEMA …
Run Code Online (Sandbox Code Playgroud)

postgresql psql bash

7
推荐指数
1
解决办法
6863
查看次数

标签 统计

postgresql ×10

psql ×10

bash ×1

client ×1

csv ×1

debian ×1

errors ×1

information-schema ×1

permissions ×1