openEuler23.09安装Postgresql16.3

news2024/12/23 0:03:05

openEuler23.09安装Postgresql16.3,基于源代码编译安装PostgreSQL的基本步骤

一、PostgreSQL数据库服务环境搭建

操作系统版本
openEuler-23.09-x86_64-dvd.iso ,安装步骤此处省略。。。

最常用且直接的方法来查看openEuler的版本号是查看/etc/os-release文件

[root@openEuler ~]$ cat /etc/os-release
NAME="openEuler"
VERSION="23.09"
ID="openEuler"
VERSION_ID="23.09"
PRETTY_NAME="openEuler 23.09"
ANSI_COLOR="0;31"

1.1、下载及上传Postgresql16.3源代码包

Postgresql16.3 下载地址
https://www.postgresql.org/ftp/source/v16.3/
在这里插入图片描述

1.2、关闭防火墙

systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service

1.3、关闭SELINUX防火墙

vi /etc/selinux/config

将内容
SELINUX=enforcing
更改为
SELINUX=disabled

1.4、安装依赖包

mount /dev/cdrom /mnt

yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib zlib-devel perl python36 tcl openssl ncurses-devel openldap pam

1.5、创建用户及属组

groupadd -g 61600 pgsql
useradd -u 61600 -g pgsql pgsql
passwd pgsql

1.6、创建目录及授权

mkdir -p /postgresql/pgdata
mkdir -p /postgresql/backup
mkdir -p /postgresql/pgsql16
mkdir -p /postgresql/soft

chown -R pgsql:pgsql /postgresql
chmod -R 775 /postgresql

1.7、解压数据库软件

su - pgsql
cd /postgresql/soft
tar zxvf postgresql-16.3.tar.gz
cd postgresql-16.3

2、从源代码编译和安装PostgreSQL

2.1、编辑环境变量

vi ~/.bash_profile

export LANG=en_US.UTF8
export PGPORT=5432  
export PGDATA=/postgresql/pgdata
export PGHOME=/postgresql/pgsql16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH  
export PATH=$PGHOME/bin:$PATH:.  
export DATE=`date +"%Y%m%d%H%M"`  
export MANPATH=$PGHOME/share/man:$MANPATH  
export PGHOST=$PGDATA  
export PGUSER=postgres  
export PGDATABASE=postgres

alias psql="rlwrap psql"

source ~/.bash_profile

2.2、从源代码编译和安装PostgreSQL

./configure --prefix=/postgresql/pgsql16 --without-readline
make
make install

1. ./configure --prefix=/postgresql/pgsql16 --without-readline
   
     ./configure 是一个脚本,用于检查您的系统以确认是否有编译PostgreSQL所需的所有库和工具。

     --prefix=/postgresql/pgsql16 指定了PostgreSQL的安装目录。这意味着当您执行 make install 时,PostgreSQL的文件将被安装到 /postgresql/pgsql16 目录下。

     --without-readline 是一个选项,告诉 configure 脚本不要包含 readline 库的支持。readline 是一个库,它允许用户通过命令行界面(CLI)编辑和重新调用命令历史。在某些情况下,为了减小安装大小或避免与系统中的其他库冲突,您可能想要禁用它。

2. make
     一旦 ./configure 脚本成功运行,它将生成一个 Makefile 文件,该文件包含了构建PostgreSQL所需的所有命令和设置。
     make 命令会读取这个 Makefile 并开始编译源代码。编译过程可能会花费一些时间,具体取决于您的系统性能。

3. make installmake 命令成功完成后,您可以使用 make install 命令将编译好的PostgreSQL文件安装到之前通过 --prefix 选项指定的目录中(在这个例子中是 /postgresql/pgsql16)。
     这个命令还会安装必要的脚本、配置文件和其他文件,以便您可以轻松地启动、停止和管理PostgreSQL服务器。

2.3、初始化数据库

su - pgsql

/postgresql/pgsql16/bin/initdb -D /postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

-- 执行命令输入的提示。。。。
The database cluster will be initialized with locale "en_US.utf8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /postgresql/pgdata ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata -l logfile start

-- 提示启动数据库服务

[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata -l logfile start
waiting for server to start.... done
server started

-- 检查postgresql 状态
[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$pg_ctl status
pg_ctl: server is running (PID: 12282)
/postgresql/pgsql16/bin/postgres "-D" "/postgresql/pgdata"

这条命令是用于初始化一个新的 PostgreSQL 数据库集群的。这里,我会详细解释这条命令中的每个部分:

  1. /postgresql/pgsql16/bin/initdb:

    • 这是 initdb 命令的完整路径。initdb 是 PostgreSQL 提供的一个工具,用于创建一个新的数据库集群。
    • /postgresql/pgsql16/bin/ 是这个 initdb 命令所在的目录。这通常意味着一个安装在 /postgresql/pgsql16 下的 PostgreSQL 16 版本。
  2. -D /postgresql/pgdata:

    • -D 选项用于指定数据目录的路径。
    • /postgresql/pgdata 是你希望新数据库集群的数据文件存放的位置。
  3. -E UTF8:

    • -E 选项用于设置新数据库的默认字符编码。
    • UTF8 是一种广泛使用的字符编码,可以表示几乎世界上所有的字符。
  4. –locale=en_US.utf8:

    • –locale 选项用于设置新数据库的区域设置。
    • en_US.utf8 表示使用美国英语的区域设置,并使用 UTF-8 字符编码。
  5. -U postgres:

    • -U 选项用于指定数据库超级用户的名称。
    • 在这里,超级用户的名称被设置为 postgres,这是 PostgreSQL 的默认超级用户名称。

执行这条命令后,initdb 会创建一个新的数据库集群在 /postgresql/pgdata 目录下,并配置为使用 UTF8 字符编码和美国英语的区域设置。之后,你可以使用 pg_ctl 或其他 PostgreSQL 工具(如 postgres 命令行工具)来启动这个数据库集群。

注意:在执行这条命令之前,你可能需要确保 /postgresql/pgdata 目录不存在或为空,因为 initdb 不会覆盖现有的数据。同时,你也需要确保有适当的权限来写入 /postgresql/pgdata 目录。

2.3、编辑postgresql.conf

vi /postgresql/pgdata/postgresql.conf

listen_addresses = '*'
port = 5432        
max_connections = 512  

#logging_collector = off ===>>logging_collector = on
#log_directory = 'log' ===>>log_directory = 'pg_log'
#log_truncate_on_rotation = off ===>> log_truncate_on_rotation = on
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' ===>> log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
shared_buffers = 2048MB  # 默认是 128MB 
max_wal_size = 1GB       
min_wal_size = 256MB     # 默认是 80MB 

2.4、编辑pg_hba.conf

vi /postgresql/pgdata/pg_hba.conf
在IP v4下增加

host    all      all     0.0.0.0/0      md5

配置 PostgreSQL 的访问控制。这行配置的含义如下:

  • host: 表示这是一个基于主机的认证方法。
  • all: 第一个 all 表示允许所有数据库被访问。
  • all: 第二个 all 表示允许所有用户进行认证。
  • 0.0.0.0/0: 这是一个 CIDR 地址,表示允许来自任何 IP 地址的连接。这通常用于测试或内部网络,但在生产环境中可能会带来安全风险。
  • md5: 表示使用 MD5 加密的密码进行认证。

这条配置行允许来自任何 IP 地址的任何用户连接到 PostgreSQL 数据库集群上的任何数据库,并使用 MD5 加密的密码进行认证。

注意:在生产环境中,这样的配置是非常不安全的,因为它允许任何人连接到你的数据库,只要他们知道正确的用户名和密码。你应该根据你的具体需求和安全策略来限制哪些用户可以从哪些 IP 地址访问哪些数据库。

编辑完 pg_hba.conf 文件后,你需要重启 PostgreSQL 服务以使更改生效。

pg_ctl stop

pg_ctl start

-- or 
/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata stop

/postgresql/pgsql16/bin/pg_ctl -D /postgresql/pgdata start

3、数据库级别配置及检查

3.1、登陆检查

psql -h 127.0.0.1 -p 5432
=======
查看  
\db+			List of tablespaces
\l				List of databases
\du+			List of roles
postgres=# select version();
                                                  version                                                  
-----------------------------------------------------------------------------------------------------------
 PostgreSQL 16.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 12.3.1 (openEuler 12.3.1-16.oe2309), 64-bit
(1 row)

postgres=# \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
(3 rows)

postgres=# \db+
                                  List of tablespaces
    Name    |  Owner   | Location | Access privileges | Options |  Size  | Description 
------------+----------+----------+-------------------+---------+--------+-------------
 pg_default | postgres |          |                   |         | 22 MB  | 
 pg_global  | postgres |          |                   |         | 565 kB | 
(2 rows)

postgres=# \du+
                                    List of roles
 Role name |                         Attributes                         | Description 
-----------+------------------------------------------------------------+-------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | 

3.2、修改postgres密码

postgres=# alter user postgres with password 'Rootroot@2024';
ALTER ROLE

3.3、创建用户及设置拥有某个数据库上的所有权限

3.3.1、创建用户

这个命令创建了一个名为pgdba_u1的用户,并为其设置了密码pgUps@2024。同时,由于NOCREATEDB选项,这个用户将没有权限创建新的数据库。

create user pgdba_u1 with password 'pgUps@2024' nocreatedb;

3.3.2、创建数据库并设置pgdba_u1为其拥有者

创建了一个名为pgdb01的数据库,并设置pgdba_u1为其拥有者

create database pgdb01 with owner=pgdba_u1;

3.3.3、授予用户所有权限

GRANT ALL PRIVILEGES ON DATABASE pgdb01 to pgdba_u1;

由于pgdba_u1已经是pgdb01的拥有者,默认已经拥有这个数据库上的所有权限。这个GRANT语句实际上在这种情况下是多余的。但是,如果您以后将其他用户设置为拥有者,或者出于某种原因需要明确授予权限,那么这个命令是有用的。

3.3.4、将用户提升为超级用户

ALTER ROLE pgdba_u1 WITH SUPERUSER;

这个命令将pgdba_u1用户提升为超级用户。这意味着该用户可以执行任何操作,包括创建和删除数据库、用户和角色等。

这通常是一个敏感的操作,因为超级用户具有对数据库系统的完全控制权。在生产环境中,应该谨慎授予超级用户权限,并确保只有必要的人员具有这些权限。

3.4、用户pgdba_u1登陆创建测试表及查看相关信息

[pgsql@openEuler:/postgresql/soft/postgresql-16.3]$psql -h 192.168.80.239 -p 5432 -U pgdba_u1 -d pgdb01
Password for user pgdba_u1: 
psql (16.3)
Type "help" for help.

pgdb01=# \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules |   Access privileges   
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
 pgdb01    | pgdba_u1 | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =Tc/pgdba_u1         +
           |          |          |                 |            |            |            |           | pgdba_u1=CTc/pgdba_u1
 postgres  | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/postgres          +
           |          |          |                 |            |            |            |           | postgres=CTc/postgres
(4 rows)

pgdb01=# select rolname,rolpassword from pg_authid;
           rolname           |                                                              rolpassword                                                              
-----------------------------+---------------------------------------------------------------------------------------------------------------------------------------
 pg_database_owner           | 
 pg_read_all_data            | 
 pg_write_all_data           | 
 pg_monitor                  | 
 pg_read_all_settings        | 
 pg_read_all_stats           | 
 pg_stat_scan_tables         | 
 pg_read_server_files        | 
 pg_write_server_files       | 
 pg_execute_server_program   | 
 pg_signal_backend           | 
 pg_checkpoint               | 
 pg_use_reserved_connections | 
 pg_create_subscription      | 
 postgres                    | SCRAM-SHA-256$4096:4xevb/JS9Chmb3wI0JzBLA==$GbYrz3EO1JLuj2rszPFhLztLzpYlMMr3YaEihl4wOKM=:FfC3v/RwnmsXBIeDQ/DUlrcxSHBs51vOA2a9gXgHyR8=
 pgdba_u1                    | SCRAM-SHA-256$4096:yMyYUPCwuTttLo+6GRUXeQ==$O/e9mimxth+JCmfNw+YeYd+R/Cnm2Prp6gnnhVMuqfE=:RA3PWeVmQa7lk5L3UWZvMMJUP0DDAeCTttNHp1n2wbA=
(16 rows)

pgdb01=# create table t_testpg (name varchar(50));
CREATE TABLE
pgdb01=# insert into t_testpg values('PostgreSQL12');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL13');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL14');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL15');
INSERT 0 1
pgdb01=# insert into t_testpg values('PostgreSQL16');
INSERT 0 1
pgdb01=# select * from t_testpg;
     name     
--------------
 PostgreSQL12
 PostgreSQL13
 PostgreSQL14
 PostgreSQL15
 PostgreSQL16
(5 rows)

pgdb01=# \dt t_testpg 
          List of relations
 Schema |   Name   | Type  |  Owner   
--------+----------+-------+----------
 public | t_testpg | table | pgdba_u1
(1 row)

pgdb01=# \du+
                                    List of roles
 Role name |                         Attributes                         | Description 
-----------+------------------------------------------------------------+-------------
 pgdba_u1  | Superuser                                                  | 
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | 

3.5、给表和表字段添加备注

pgdb01=# comment on table t_testpg is 'the first table of openEluer os for postgresql';
COMMENT

pgdb01=# comment on column t_testpg.name is 'information name of value';
COMMENT
pgdb01=# 
pgdb01=# \dt t_testpg 
          List of relations
 Schema |   Name   | Type  |  Owner   
--------+----------+-------+----------
 public | t_testpg | table | pgdba_u1
(1 row)

pgdb01=# \dt+ t_testpg 
                                                        List of relations
 Schema |   Name   | Type  |  Owner   | Persistence | Access method |    Size    |                  Description                   
--------+----------+-------+----------+-------------+---------------+------------+------------------------------------------------
 public | t_testpg | table | pgdba_u1 | permanent   | heap          | 8192 bytes | the first table of openEluer os for postgresql
(1 row)

pgdb01=# \d+ t_testpg 
                                                       Table "public.t_testpg"
 Column |         Type          | Collation | Nullable | Default | Storage  | Compression | Stats target |        Description        
--------+-----------------------+-----------+----------+---------+----------+-------------+--------------+---------------------------
 name   | character varying(50) |           |          |         | extended |             |              | information name of value
Access method: heap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Redis]缓存常见问题解决(缓存穿透、击穿、雪崩一文解决!通俗易懂、代码实战!手把手教你解决缓存问题三兄弟!)

Redis常见问题解决 要求 只用一种缓存技术,从实验点中挑一些试验进行试验原理。 1.缓存原理 目标:理解缓存的基本原理和工作机制。 实验步骤: 阅读各缓存技术机制的文档和官方资料。实现一个简单的应用程序,模拟数据的读写和…

AD导出Gender、坐标文件、BOM

导出Gender 方式一 等输出完成后,将工程文件下的OutPut文件打包发给厂家即可 方式二 导出外观、层 导出孔 导出坐标文件 导出BOM 备注 外观尽量用机械层 参考 https://blog.csdn.net/lwb450921/article/details/123141335

Python发送HTML邮件有哪些步骤?怎么设置?

Python发送HTML邮件如何实现?Python发送邮件的策略? HTML邮件不仅可以包含丰富的文本格式,还可以插入图片、链接和其他多媒体内容,从而提升邮件的美观性和功能性。AokSend将详细介绍Python发送HTML邮件的主要步骤,帮助…

动态规划:基本概念

Dynamic Programming 动态规划(Dynamic Programming, DP) 是一种算法设计技巧,通常用来解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为更小的子问题,逐步解决这些子问题并将结果存储起来,以避免重复计…

C++拷贝构造函数、运算符重载函数、赋值运算符重载函数、前置++和后置++重载等的介绍

文章目录 前言一、拷贝构造函数1. 概念2. 特征3. 编译器生成默认拷贝构造函数4. 拷贝构造函数典型使用场景 二、运算符重载函数三、赋值运算符重载函数1. 赋值运算符重载格式2. 赋值运算符只能重载成类的成员函数不能重载成全局函数3.编译器生成一个默认赋值运算符重载4. 运算符…

上交商汤联合提出一种虚拟试穿的创新方法,利用自监督视觉变换器 (ViT) 和扩散模型

上交&商汤联合提出一种虚拟试穿的创新方法,利用自监督视觉变换器 (ViT) 和扩散模型,强调细节增强,通过将 ViT 生成的局部服装图像嵌入与其全局对应物进行对比。虚拟试穿体验中细节的真实感和精确度有了显着提高,大大超越了现有…

使用粒子滤波(particle filter)进行视频目标跟踪

虽然有许多用于目标跟踪的算法,包括较新的基于深度学习的算法,但对于这项任务,粒子滤波仍然是一个有趣的算法。所以在这篇文章中,我们将介绍视频中的目标跟踪:预测下一帧中物体的位置。在粒子滤波以及许多其他经典跟踪…

Antd Table 表格 拖拽列宽

antd 的表格组件的列宽,是通过width属性去初始化的,有时候渲染的内容不固定,这个宽做不到通用所以研究怎么实现表格列宽拖动,主要的实现步骤如下: 使用table的components API修改表格头部为 react-resizable提供的组件…

专业技能篇---计算机网络

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么?二、Http的状态码有哪些?三、 HTTP与HTTPS有什么区别?四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别?六、GET与POST WebSock…

基于机器学习和深度学习的C-MAPSS涡扇发动机剩余寿命RUL预测(Python,Jupyter Notebook环境)

涡扇发动机全称为涡轮风扇发动机,是一种先进的空中引擎,由涡轮喷气发动机发展而来。涡扇发动机主要特点是首级压缩机的面积比涡轮喷气发动机大。同时,空气螺旋桨(扇)将部分吸入的空气从喷射引擎喷射出来,并…

尚品汇-(四)

(1)商品的基本知识 1.1基本信息—分类 一般情况可以分为两级或者三级。咱们的项目一共分为三级,即一级分类、二级分类、三级分类。 比如:家用电器是一级分类,电视是二级分类,那么超薄电视就是三级分类。…

一单1800,这个项目凭什么这么火?

AI变现营八期学员一单1800成功拿下,这还是开营不到一周的结果! AI代写这个项目为什么现在越来越火? 第一点原因就是因为AI的火爆,让传统代写行业变现效率增加了N倍,普通人可以入局,只要会调教AI就可以了&am…

Win11下安装VS2022失败的解决办法

前几天我把我的HP Z840的操作系统换成了Win11,在重装VS2022时遇到了麻烦,提示无法安装 Microsoft.VisualStudio.Devenv.Msi。 查看安装日志提示:Could not write value devenv.exe to key \SOFTWARE\Microsoft\Internet Explorer\Main\Featur…

基于JSP的交通事故档案管理系统

开头语:你好,我是计算机学长猫哥,如果你对系统有更多的期待或建议,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:JSPJava 工具:ECLIPSE、Tomcat 系统展示 首页 管理员界…

基于YOLOv5的火灾检测系统的设计与实现

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口 详细代码说明YOLOv5检测器类视频处理类主窗口类 使用说明环境配置运行程序操作步骤 检测示例图像检测视频检测实时检测 数据集介绍数据集获取数据集规模 YOLOv5模型介…

vscode中同一页面使用批量替换

在vscode中像word中那样批量替换 首先搜索要替换的内容快捷键是ctrlf 然后输入你要搜索的内容 第二个框中输入你要替换成的内容 点击全部替换,就可以了

Web应用和Tomcat的集成鉴权1-BasicAuthentication

作者:私语茶馆 1.Web应用与Tomcat的集成式鉴权 Web应用部署在Tomcat时,一般有三层鉴权: (1)操作系统鉴权 (2)Tomcat容器层鉴权 (3)应用层鉴权 操作系统层鉴权包括但不限于:Tomcat可以和Windows的域鉴权集成,这个适合企业级的统一管理。也可以在Tomcat和应用层独立…

高级算法入门必看—21个NPC问题及其证明

文章目录 前言一、布尔可满足性问题二、每子句至多3个变量的布尔可满足性问题(3-SAT)三、0-1整数规划(0-1 integer programming)四、Set packing(Set packing)五、最小顶点覆盖问题(Vertex cove…

计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验

目录 一、实验原理二、实验步骤1. 图像读取与预处理2. 边缘检测3. 轮廓检测4. 标记轮廓序号 三、实验结果 Hi,大家好,我是半亩花海。 本实验旨在利用 Python 和 OpenCV 库,通过图像处理和边缘检测算法实现黄豆图像的自动识别和计数&#xff0…

港湾周评|高盛眼中的618增长

《港湾商业观察》李镭 年中最重要的购物节618终于尘埃落定了。2024年的618各大电商平台竞技情况如何?又有哪些新的亮点?都成为外界观察消费行为的参考指标。 根据京东618数据显示:累计成交额过10亿的品牌83个,超15万个中小商家销…