pg查询语句不能带库名吗

pg查询语句不能带库名吗,第1张

是的。PG数据是postgrel数据库,⼀直在不同的数据库中使⽤,发现最后对每⼀种不同的数据库的条件使⽤上有⼀定的不同。使⽤的⽐较多的⼀个就是查询,各种查询。⽐如查询今天的数据、昨天的数据、⼀个⽉的数据。

在 PostgreSQL 中,如果你在同一模式下声明两个同名的函数或存储过程,就会发生重复声明错误。为了避免这种情况,你可以使用 CREATE OR REPLACE 命令,它会创建一个新函数或存储过程,如果同名的函数或存储过程已经存在,则先将其删除,然后再创建新的函数或存储过程。

如果不能 *** 作服务器,但是能够远程连接到数据库进行增删改查,备份数据库的方法有以下几种:

使用pg_dump命令远程备份:在远程连接到数据库后,可以使用pg_dump命令备份数据库,将备份文件传输到本地或其他服务器。命令示例:pg_dump -h [数据库地址] -p [数据库端口] -U [用户名] -W [密码] -F c -b -v -f [备份文件名] [数据库名]。

使用pg_dumpall命令备份所有数据库:在远程连接到数据库后,可以使用pg_dumpall命令备份所有数据库,将备份文件传输到本地或其他服务器。命令示例:pg_dumpall -h [数据库地址] -p [数据库端口] -U [用户名] -W [密码] -f [备份文件名]。

使用pgAdmin等GUI工具进行备份:如果可以通过GUI工具远程连接到数据库,可以使用工具提供的备份功能进行备份。

无论使用哪种备份方法,建议在备份之前先确认数据的完整性和一致性,以确保备份数据的准确性。另外,备份文件的传输也需要注意数据安全性,可以使用加密方式或者传输到安全的存储设备上。

由于 PostgreSQL 是大小写敏感的,并默认对SQL语句中的数据库对象名称转换为小写,因此如果你在创建数据库对象时指定了大小写混和的对象名称,那么在通过SQL语句访问 这些对象时,必须使用双引号(")将数据库对象括起来,以提示 PostgreSQL 不用帮你转换对象名为小写,否则将激发“xxxxx对象不存在”的异常,譬如您的数据库中有名为 TUser 的表,您在 PostgreSQL 自带的图形化查询工具中必须使用类似这样的查询语句才能正确执行:SELECT FROM "TUser",当然它对 SQL 标准中的保留字和关键字是不区分大小写的,所以写成 select From "TUser" 这样也是完全可以的。

另外,PostgreSQL 对数据也是大小写敏感的,这点与 SQLServer 不同(SQLServer 默认是不敏感的),譬如在 TUser 表中有字段 Name,其中有一行 Name 字段值为“Tony Tang”的记录,如果直接使用

SELECT FROM "TUser" WHERE "Name" LIKE '%tony%';

是查询不到这条记录的,不过你可以这么写:

SELECT FROM "TUser" WHERE UPPER("Name") LIKE '%TONY%';

呵呵,是不是觉得这样不太好看,而且担心性能会受影响?幸好 PostgreSQL 提供了关键字 ILIKE 来帮我们解决这个问题,这真是个非常有趣的关键字(I like),对于第一种写法只需要将 LIKE 替换成 ILIKE 就可以了。

最后,建议在编写 SQL 脚本的时候,使用单引号做字符串常量的标识,虽然在 MS SQLServer 中双引号和单引号均可作为字符串常量的标识符,但是在 PostgreSQL 中对此就有严格的功能区分(不能用双引号作为字符串常量的标识符),为了保险起见,建议对所有的数据库对象名均使用双引号(")将其显式约定,以保证大小 写的严格匹配。

您好,PG数据库默认最多查询返回5000条数据,这是为了避免查询过多数据导致性能问题。如果需要修改这个限制,可以通过修改数据库参数或者优化查询语句来实现。

一种方法是通过修改数据库参数来增加查询返回的数据量。可以修改参数“max_parallel_workers_per_gather”和“max_parallel_workers”,这两个参数控制了并行查询的工作进程数量,增加这两个参数的值可以增加查询返回数据的数量。但是需要注意的是,增加这些参数的值可能会导致数据库性能下降,因此需要根据实际情况进行调整。

另一种方法是优化查询语句。可以通过使用分页查询、限制查询返回的列数、使用索引等方法来减少查询返回的数据量。例如,使用LIMIT和OFFSET关键字进行分页查询,只查询需要的数据,可以减少返回的数据量,提高查询性能。使用索引可以加快查询速度,减少返回数据的数量。

总之,如果需要修改PG数据库最多查询返回5000条的限制,可以通过修改数据库参数或者优化查询语句来实现。但是需要注意的是,增加返回数据的数量可能会导致性能下降,需要根据实际情况进行调整。

如下罗列了一些创建、增、删、改、查相关,请参考(涉及的具体语法及参数自行查阅官方文档):

--1CREATE USER

--创建用户jim,登录密码为xxxxxxxxx。

openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';

--下面语句与上面的等价。

openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';

--如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。

openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';

--将用户jim的登录密码由xxxxxxxxx修改为Abcd@123。

openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';

--为用户jim追加CREATEROLE权限。

openGauss=# ALTER USER jim CREATEROLE;

--将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。

openGauss=# ALTER USER jim SET enable_seqscan TO on;

--重置jim的enable_seqscan参数。

openGauss=# ALTER USER jim RESET enable_seqscan;

--锁定jim帐户。

openGauss=# ALTER USER jim ACCOUNT LOCK;

--删除用户。

openGauss=# DROP USER kim CASCADE;

openGauss=# DROP USER jim CASCADE;

openGauss=# DROP USER dim CASCADE;

--2创建和管理数据库

--使用如下命令创建一个新的数据库db_tpcc。

openGauss=# CREATE DATABASE db_tpcc;

注:

•数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。

•如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。

•如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。

•创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。

--查看数据库

•使用\l元命令查看数据库系统的数据库列表。

openGauss=# \l

•使用如下命令通过系统表pg_database查询数据库列表。

openGauss=# SELECT datname FROM pg_database;

--修改数据库

用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。

•使用以下命令为数据库设置默认的模式搜索路径。

openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;

--使用如下命令为数据库重新命名。

openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;

--删除数据库

用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了磁盘上带有数据的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除 *** 作会失败。删除数据库时请先连接到其他的数据库。

使用如下命令删除数据库:

openGauss=# DROP DATABASE human_tpcds;

--3CREATE TABLE

--表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。创建表前请先规划存储模型。

openGauss=# CREATE TABLE customer_t1

(

c_customer_sk integer,

c_customer_id char(5),

c_first_name char(6),

c_last_name char(8)

);

当结果显示为如下信息,则表示创建成功。

CREATE TABLE

其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。

--4向表中插入数据

--向表中插入数据前,意味着表已创建成功。

向表customer_t1中插入一行:

数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。

openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');

如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');

如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');

用户也可以对独立的字段或者整个行明确缺省值:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);

openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;

如果需要在表中插入多行,请使用以下命令:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES

(6885, 'maps', 'Joes'),

(4321, 'tpcds', 'Lily'),

(9527, 'world', 'James');

如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。

如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。

openGauss=# CREATE TABLE customer_t2

(

c_customer_sk integer,

c_customer_id char(5),

c_first_name char(6),

c_last_name char(8)

);

openGauss=# INSERT INTO customer_t2 SELECT FROM customer_t1;

从指定表插入数据到当前表时,若指定表与当前表对应的字段数据类型之间不存在隐式转换,则这两种数据类型必须相同。

删除备份表

openGauss=# DROP TABLE customer_t2 CASCADE;

在删除表的时候,若当前需删除的表与其他表有依赖关系,需先删除关联的表,然后再删除当前表。

--5更新表中数据

修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。

使用UPDATE命令更新现有行,需要提供以下三种信息:

•表的名称和要更新的字段名

•字段的新值

•要更新哪些行

SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。

建立表和插入数据的步骤请参考创建表和向表中插入数据。

需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876:

openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;

这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。

比如,把所有c_customer_sk的值增加100:

openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;

在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。

在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的 *** 作符也可以使用。

用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:

openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;

批量更新或删除数据后,会在数据文件中产生大量的删除标记,查询过程中标记删除的数据也是需要扫描的。故多次批量更新/删除后,标记删除的数据量过大会严重影响查询的性能。建议在批量更新/删除业务会反复执行的场景下,定期执行VACUUM FULL以保持查询性能。

--6查看数据

使用系统表pg_tables查询数据库所有表的信息。

openGauss=# SELECT FROM pg_tables;

使用gsql的\d+命令查询表的属性。

openGauss=# \d+ customer_t1;

执行如下命令查询表customer_t1的数据量。

openGauss=# SELECT count() FROM customer_t1;

执行如下命令查询表customer_t1的所有数据。

openGauss=# SELECT FROM customer_t1;

执行如下命令只查询字段c_customer_sk的数据。

openGauss=# SELECT c_customer_sk FROM customer_t1;

执行如下命令过滤字段c_customer_sk的重复数据。

openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1;

执行如下命令查询字段c_customer_sk为3869的所有数据。

openGauss=# SELECT FROM customer_t1 WHERE c_customer_sk = 3869;

执行如下命令按照字段c_customer_sk进行排序。

openGauss=# SELECT FROM customer_t1 ORDER BY c_customer_sk;

--7删除表中数据

在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。

SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。

使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:

openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;

如果执行如下命令之一,会删除表中所有的行。

openGauss=# DELETE FROM customer_t1;

openGauss=# TRUNCATE TABLE customer_t1;

全表删除的场景下,建议使用truncate,不建议使用delete。

删除创建的表:

openGauss=# DROP TABLE customer_t1;

以上就是关于pg查询语句不能带库名吗全部的内容,包括:pg查询语句不能带库名吗、pg数据库不能重复声明吗怎么设置、在不能 *** 作服务器的情况下如何备份pg数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9547750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存