PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

cách sử dụng các biến trong tập lệnh psql

Trước hết, bạn đang cố gắng nối hai chuỗi với + , nhưng toán tử SQL để nối là || , với thông tin đó, bạn có thể nghĩ rằng kết quả mong đợi sẽ là ( sẽ không hoạt động ):

\set path '''c:\\server\\data\\'''
COPY paymentMethods (name,regexString) FROM :path || 'paymentMethods.csv' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :path || 'priceLevels.csv' WITH (FORMAT csv, HEADER false);

Nhưng mà! COPY lệnh mong đợi một chuỗi ký tự cho đường dẫn, không phải một biểu thức, vì vậy bạn thực sự nên cung cấp đường dẫn. Lưu ý rằng nó sẽ hoạt động đối với các lệnh như SELECT , INSERT , UPDATE , v.v.

Với thông tin đó, bạn chỉ có thể sử dụng psql các biến, như Pavel đã trỏ và nối các chuỗi thành một psql của biến. Một giải pháp tốt là sử dụng psql 's :'var' cú pháp chèn biến dưới dạng một chuỗi vào biểu thức SQL:

\set path 'c:\\server\\data\\'
\set paymentMethodsPath :path 'paymentMethods.csv'
\set priceLevelsPath :path 'priceLevels.csv'
COPY paymentMethods (name,regexString) FROM :'paymentMethodsPath' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :'priceLevels' WITH (FORMAT csv, HEADER false);

Cái nào sẽ tạo (sẽ gửi đến máy chủ của PostgreSQL):

COPY paymentMethods (name,regexString) FROM E'c:\\server\\data\\paymentMethods.csv' WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM E'c:\\server\\data\\priceLevels.csv' WITH (FORMAT csv, HEADER false);

:'var' này cú pháp sẽ không hoạt động trên tất cả psql phiên bản (tôi không nhớ cái này đã được giới thiệu bây giờ), nhưng đối với các phiên bản cũ, bạn có thể dễ dàng sử dụng tính năng trích dẫn đô la:

\set path 'c:\\server\\data\\'
\set paymentMethodsPath :path 'paymentMethods.csv'
\set priceLevelsPath :path 'priceLevels.csv'
COPY paymentMethods (name,regexString) FROM $$:paymentMethodsPath$$ WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM $$:priceLevels$$ WITH (FORMAT csv, HEADER false);

Hoặc thoát vào dấu ngoặc đơn:

\set path 'c:\\server\\data\\'
\set paymentMethodsPath 'E''':path'paymentMethods.csv'''
\set priceLevelsPath 'E''':path'priceLevels.csv'''
COPY paymentMethods (name,regexString) FROM :paymentMethodsPath WITH (FORMAT csv, HEADER true);
COPY priceLevels (name) FROM :priceLevels WITH (FORMAT csv, HEADER false);

Đó là nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm RPAD () trong PostgreSQL

  2. PostgreSQL:UPDATE ngụ ý di chuyển qua các phân vùng

  3. PostgreSQL:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất trên lệnh UPDATE

  4. Java Crosstab - câu lệnh chuẩn bị truy vấn

  5. Làm cách nào để lọc các hàng trên các giá trị lồng nhau trong một cột json?